Skip to content

Commit bd2d7c1

Browse files
authored
Merge pull request #896 from SolidOS/feat/acl-match-legacy
Address the missing features from the current sharing pane.
2 parents 6ec3ed1 + 7e3566f commit bd2d7c1

17 files changed

Lines changed: 1777 additions & 167 deletions

‎package-lock.json‎

Lines changed: 98 additions & 98 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "solid-ui",
3-
"version": "5.0.2-0",
3+
"version": "5.0.2-1",
44
"description": "UI library for Solid applications",
55
"main": "dist/index.cjs.js",
66
"types": "dist/index.d.ts",
@@ -114,7 +114,7 @@
114114
"mime-types": "^3.0.2",
115115
"pane-registry": "5.0.2-0",
116116
"rdflib": "2.4.1",
117-
"solid-logic": "6.0.1-1",
117+
"solid-logic": "6.0.1-3",
118118
"solid-namespace": "^0.5.4",
119119
"uuid": "^14.0.0"
120120
},

‎src/components/access-control-modal/AccessControlAddAccess.styles.css‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
.access-grants-form-main {
1919
display: flex;
20-
align-items: flex-start;
20+
align-items: center;
2121
gap: 10px;
2222
align-self: stretch;
2323

‎src/components/access-control-modal/AccessControlAddAccess.ts‎

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import { customElement, WebComponent } from '@/lib/components'
22
import { html, nothing } from 'lit'
33
import { property } from 'lit/decorators.js'
44
import { ACCESS_ROLES, type AccessRole, type DirectoryEntry } from 'solid-logic'
5-
import type { AsyncComboboxOptionsProvider, ComboboxChangeEvent } from '@/components/combobox'
5+
import type { AsyncComboboxOptionsProvider, ComboboxChangeEvent, ComboboxOptionData } from '@/components/combobox'
66

77
import '~icons/lucide/book-user'
88
import '~icons/lucide/user-round'
99
import '~icons/lucide/users'
1010
import '~icons/lucide/circle-x'
11+
import '~icons/lucide/globe'
1112
import '@/components/button'
1213
import '@/components/combobox'
1314
import '@/components/combobox-option'
@@ -56,6 +57,9 @@ export default class AccessControlAddAccess extends WebComponent {
5657
@property({ attribute: false })
5758
accessor inputError = ''
5859

60+
@property({ type: Boolean })
61+
accessor disabled = false
62+
5963
@property({ attribute: false })
6064
accessor asyncOptionsProvider: AsyncComboboxOptionsProvider | null = null
6165

@@ -69,15 +73,16 @@ export default class AccessControlAddAccess extends WebComponent {
6973
}
7074

7175
private onPrincipalSelect (event: ComboboxChangeEvent) {
72-
const option = event.detail.option
76+
const option = event.detail.option as ComboboxOptionData & { targetKind?: 'origin' | 'trustedApp' }
7377
if (typeof option.value !== 'string') {
7478
return
7579
}
7680

7781
this.dispatchEvent(new CustomEvent<TargetSelectedDetail>('target-selected', {
7882
detail: {
7983
value: option.value,
80-
label: option.label
84+
label: option.label,
85+
targetKind: option.targetKind
8186
},
8287
bubbles: true,
8388
composed: true
@@ -86,12 +91,15 @@ export default class AccessControlAddAccess extends WebComponent {
8691

8792
private onRoleChange (event: ComboboxChangeEvent) {
8893
const role = event.detail.option.value
89-
if (typeof role !== 'string' || !ACCESS_ROLES.includes(role as AccessRole)) {
94+
const accessRole = typeof role === 'string'
95+
? ACCESS_ROLES.find(candidate => candidate === role)
96+
: undefined
97+
if (!accessRole) {
9098
return
9199
}
92100

93101
this.dispatchEvent(new CustomEvent<RoleChangedDetail>('role-changed', {
94-
detail: { role: role as AccessRole },
102+
detail: { role: accessRole },
95103
bubbles: true,
96104
composed: true
97105
}))
@@ -118,6 +126,7 @@ export default class AccessControlAddAccess extends WebComponent {
118126
<div class="access-grants-input">
119127
<solid-ui-combobox
120128
class="access-principal-combobox"
129+
.disabled=${this.disabled}
121130
label="Add person, group or software agent URL."
122131
.srOnlyLabel=${true}
123132
.value=${this.principalInputValue}
@@ -133,6 +142,7 @@ export default class AccessControlAddAccess extends WebComponent {
133142
</div>
134143
<solid-ui-combobox
135144
class="access-role-select access-role-select--top"
145+
.disabled=${this.disabled}
136146
.value=${this.addAccessRoleValue}
137147
@change=${this.onRoleChange}
138148
>
@@ -156,11 +166,17 @@ export default class AccessControlAddAccess extends WebComponent {
156166
<div class="access-grants-pending">
157167
${this.pendingAccessGrants.map((grant, index) => html`
158168
<div class="access-grants-pending-item">
159-
<span class="access-grants-pending-item-label">${grant.label}</span>
169+
<span class="access-grants-pending-item-label">
170+
${grant.targetKind === 'trustedApp'
171+
? html`<icon-lucide-globe style="width: 13px; height: 13px; vertical-align: -2px;"></icon-lucide-globe>`
172+
: nothing}
173+
${grant.label}
174+
</span>
160175
<solid-ui-button
161176
type="button"
162177
variant="ghost"
163178
class="access-grants-pending-item-remove"
179+
?disabled=${this.disabled}
164180
@click=${() => this.onPendingGrantRemove(index)}
165181
>
166182
<span class="sr-only">Remove ${grant.label}</span>

‎src/components/access-control-modal/AccessControlErrors.ts‎

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@ export default class AccessControlErrors extends WebComponent {
2525
}))
2626
}
2727

28+
private getScopeLabel (scope: NonNullable<Extract<AccessSaveError, { action: 'grant' | 'revoke' }>['scope']>) {
29+
return scope === 'folder+contents'
30+
? 'folder and contents'
31+
: scope === 'container'
32+
? 'folder'
33+
: scope === 'contents'
34+
? 'contents'
35+
: 'resource'
36+
}
37+
2838
protected render () {
2939
if (!this.errors.length) {
3040
return html``
@@ -44,11 +54,14 @@ export default class AccessControlErrors extends WebComponent {
4454
<span class="access-control-save-error-label">${error.label}</span>
4555
<span class="access-control-save-error-detail">
4656
${error.action === 'grant'
47-
? `Could not grant ${error.role ?? 'access'}`
57+
? `Could not grant ${error.role ?? 'access'} for ${error.scope ? this.getScopeLabel(error.scope) : 'resource'}`
4858
: error.action === 'revoke'
49-
? 'Could not remove access'
59+
? `Could not remove access for ${error.scope ? this.getScopeLabel(error.scope) : 'resource'}`
60+
: error.action === 'reset'
61+
? 'Could not reset sharing'
5062
: 'Could not save access changes'}
5163
</span>
64+
<span class="access-control-save-error-message">${error.message}</span>
5265
</li>
5366
`)}
5467
</ul>

‎src/components/access-control-modal/AccessControlGeneralAccess.ts‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ export default class AccessControlGeneralAccess extends WebComponent {
2727
@property({ attribute: false })
2828
accessor publicAccessRoleValue: AccessRole = 'No Access'
2929

30+
@property({ type: Boolean })
31+
accessor disabled = false
32+
3033
private onAuthenticatedRoleChange (event: ComboboxChangeEvent) {
3134
this.dispatchRoleChange('authenticated-role-changed', event, ACCESS_ROLES)
3235
}
@@ -83,6 +86,7 @@ export default class AccessControlGeneralAccess extends WebComponent {
8386
return html`
8487
<solid-ui-combobox
8588
class="access-role-select access-role-select--compact access-role-select--general access-grants-role access-grants-role--editable access-role-select--authenticated"
89+
.disabled=${this.disabled}
8690
.value=${this.authenticatedAccessRoleValue}
8791
@change=${this.onAuthenticatedRoleChange}
8892
>
@@ -95,6 +99,7 @@ export default class AccessControlGeneralAccess extends WebComponent {
9599
return html`
96100
<solid-ui-combobox
97101
class="access-role-select access-role-select--compact access-role-select--general access-grants-role access-grants-role--editable access-role-select--public"
102+
.disabled=${this.disabled}
98103
.value=${this.publicAccessRoleValue}
99104
@change=${this.onPublicRoleChange}
100105
>
@@ -149,7 +154,7 @@ export default class AccessControlGeneralAccess extends WebComponent {
149154
</solid-ui-button>
150155
</div>
151156
${this.renderGeneralShareRow({
152-
title: 'Share with Anyone Signed In',
157+
title: 'Only logged in users with the link',
153158
description: 'Users must sign in to SolidOS to access this shared item using the link.',
154159
variant: 'authenticated'
155160
})}

0 commit comments

Comments
 (0)