@isoftdata/svelte-user-configuration 1.3.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -151
- package/dist/DeactivateUserModal.svelte +59 -47
- package/dist/DeactivateUserModal.svelte.d.ts +10 -22
- package/dist/PasswordRecoveryModal.svelte +83 -61
- package/dist/PasswordRecoveryModal.svelte.d.ts +8 -20
- package/dist/PasswordSetModal.svelte +127 -94
- package/dist/PasswordSetModal.svelte.d.ts +12 -24
- package/dist/PermissionList.svelte +289 -196
- package/dist/PermissionList.svelte.d.ts +21 -34
- package/dist/UserAccountInfo.svelte +189 -99
- package/dist/UserAccountInfo.svelte.d.ts +35 -47
- package/dist/UserConfiguration.svelte +116 -41
- package/dist/UserConfiguration.svelte.d.ts +38 -51
- package/dist/UserGroupMembership.svelte +64 -40
- package/dist/UserGroupMembership.svelte.d.ts +14 -30
- package/dist/UserSiteAccess.svelte +65 -38
- package/dist/UserSiteAccess.svelte.d.ts +17 -33
- package/dist/util.d.ts +22 -22
- package/package.json +77 -73
|
@@ -1,41 +1,116 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type {
|
|
3
|
+
ErrorFn,
|
|
4
|
+
IconName,
|
|
5
|
+
UserSites,
|
|
6
|
+
SuccessFn,
|
|
7
|
+
SiteLabel,
|
|
8
|
+
UserAccount,
|
|
9
|
+
Permissions,
|
|
10
|
+
GroupMembership,
|
|
11
|
+
CanToggleActive,
|
|
12
|
+
DeactivateUserFn,
|
|
13
|
+
CanEditSiteAccess,
|
|
14
|
+
SiteAccessChangeFn,
|
|
15
|
+
PermissionValueMap,
|
|
16
|
+
CanEditAccountInfo,
|
|
17
|
+
ConfirmPasswordSetFn,
|
|
18
|
+
AccountInfoChangedFn,
|
|
19
|
+
CanEditGroupMembership,
|
|
20
|
+
PasswordValidationRules,
|
|
21
|
+
GroupMembershipChangeFn,
|
|
22
|
+
PermissionValueChangeFn,
|
|
23
|
+
GroupPermissionValueMap,
|
|
24
|
+
GenerateNewActivationPINFn,
|
|
25
|
+
DoSendPasswordRecoveryToken,
|
|
26
|
+
SendPasswordRecoveryTokenFn,
|
|
27
|
+
HasPermissionToChangePassword,
|
|
28
|
+
PermissionListCardHeaderTitle,
|
|
29
|
+
} from './util'
|
|
30
|
+
|
|
31
|
+
import UserSiteAccess from './UserSiteAccess.svelte'
|
|
32
|
+
import PermissionList from './PermissionList.svelte'
|
|
33
|
+
import UserAccountInfo from './UserAccountInfo.svelte'
|
|
34
|
+
import UserGroupMembership from './UserGroupMembership.svelte'
|
|
35
|
+
|
|
36
|
+
interface Props {
|
|
37
|
+
siteLabel?: SiteLabel
|
|
38
|
+
userAccountInfoIcon?: IconName
|
|
39
|
+
groupMembershipIcon?: IconName
|
|
40
|
+
permissionListIcon?: IconName
|
|
41
|
+
userSiteAccessIcon?: IconName
|
|
42
|
+
permissionListCardHeaderTitle?: PermissionListCardHeaderTitle
|
|
43
|
+
usernameInput?: HTMLInputElement | undefined
|
|
44
|
+
userAccount: UserAccount
|
|
45
|
+
canToggleActive?: CanToggleActive
|
|
46
|
+
canEditAccountInfo?: CanEditAccountInfo
|
|
47
|
+
doSendPasswordRecoveryToken?: DoSendPasswordRecoveryToken
|
|
48
|
+
hasPermissionToChangePassword?: HasPermissionToChangePassword
|
|
49
|
+
passwordValidationRules?: PasswordValidationRules | undefined
|
|
50
|
+
error?: ErrorFn
|
|
51
|
+
success?: SuccessFn
|
|
52
|
+
deactivateUser?: DeactivateUserFn
|
|
53
|
+
confirmPasswordSet?: ConfirmPasswordSetFn | undefined
|
|
54
|
+
accountInfoChanged?: AccountInfoChangedFn
|
|
55
|
+
sendPasswordRecoveryToken?: SendPasswordRecoveryTokenFn
|
|
56
|
+
generateNewActivationPIN?: GenerateNewActivationPINFn
|
|
57
|
+
userSites: UserSites
|
|
58
|
+
canEditSiteAccess?: CanEditSiteAccess
|
|
59
|
+
siteAccessChange?: SiteAccessChangeFn
|
|
60
|
+
groupMembership: GroupMembership
|
|
61
|
+
canEditGroupMembership?: CanEditGroupMembership
|
|
62
|
+
groupMembershipChange?: GroupMembershipChangeFn
|
|
63
|
+
permissions: Permissions
|
|
64
|
+
permissionValueMap?: PermissionValueMap
|
|
65
|
+
groupPermissionValueMap?: GroupPermissionValueMap
|
|
66
|
+
permissionValueChange?: PermissionValueChangeFn
|
|
67
|
+
userAccountInfo?: import('svelte').Snippet
|
|
68
|
+
siteAccess?: import('svelte').Snippet
|
|
69
|
+
userGroupMembership?: import('svelte').Snippet
|
|
70
|
+
permissionList?: import('svelte').Snippet
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
let {
|
|
74
|
+
siteLabel = 'Site',
|
|
75
|
+
userAccountInfoIcon = 'user',
|
|
76
|
+
groupMembershipIcon = 'users',
|
|
77
|
+
permissionListIcon = 'user-lock',
|
|
78
|
+
userSiteAccessIcon = 'industry-windows',
|
|
79
|
+
permissionListCardHeaderTitle = 'Permissions',
|
|
80
|
+
usernameInput = $bindable(undefined),
|
|
81
|
+
userAccount = $bindable(),
|
|
82
|
+
canToggleActive = true,
|
|
83
|
+
canEditAccountInfo = true,
|
|
84
|
+
doSendPasswordRecoveryToken = $bindable(false),
|
|
85
|
+
hasPermissionToChangePassword = false,
|
|
86
|
+
passwordValidationRules = undefined,
|
|
87
|
+
error = undefined,
|
|
88
|
+
success = undefined,
|
|
89
|
+
deactivateUser = undefined,
|
|
90
|
+
confirmPasswordSet = undefined,
|
|
91
|
+
accountInfoChanged = undefined,
|
|
92
|
+
sendPasswordRecoveryToken = undefined,
|
|
93
|
+
generateNewActivationPIN = () => Promise.resolve(),
|
|
94
|
+
userSites,
|
|
95
|
+
canEditSiteAccess = true,
|
|
96
|
+
siteAccessChange = undefined,
|
|
97
|
+
groupMembership,
|
|
98
|
+
canEditGroupMembership = true,
|
|
99
|
+
groupMembershipChange = undefined,
|
|
100
|
+
permissions,
|
|
101
|
+
permissionValueMap = new Map(),
|
|
102
|
+
groupPermissionValueMap = undefined,
|
|
103
|
+
permissionValueChange = undefined,
|
|
104
|
+
userAccountInfo,
|
|
105
|
+
siteAccess,
|
|
106
|
+
userGroupMembership,
|
|
107
|
+
permissionList,
|
|
108
|
+
}: Props = $props()
|
|
109
|
+
|
|
110
|
+
let cardHeight: number | undefined = $state()
|
|
36
111
|
</script>
|
|
37
112
|
|
|
38
|
-
<div class="
|
|
113
|
+
<div class="row">
|
|
39
114
|
<div class="col-12 col-lg-4 mb-2">
|
|
40
115
|
<UserAccountInfo
|
|
41
116
|
bind:userAccount
|
|
@@ -55,7 +130,7 @@ let cardHeight;
|
|
|
55
130
|
{sendPasswordRecoveryToken}
|
|
56
131
|
icon={userAccountInfoIcon}
|
|
57
132
|
>
|
|
58
|
-
|
|
133
|
+
{@render userAccountInfo?.()}
|
|
59
134
|
</UserAccountInfo>
|
|
60
135
|
</div>
|
|
61
136
|
<div class="col-12 col-lg-4 mb-2">
|
|
@@ -67,7 +142,7 @@ let cardHeight;
|
|
|
67
142
|
icon={userSiteAccessIcon}
|
|
68
143
|
style="height: {cardHeight}px;"
|
|
69
144
|
>
|
|
70
|
-
|
|
145
|
+
{@render siteAccess?.()}
|
|
71
146
|
</UserSiteAccess>
|
|
72
147
|
</div>
|
|
73
148
|
<div class="col-12 col-lg-4 mb-2">
|
|
@@ -78,11 +153,11 @@ let cardHeight;
|
|
|
78
153
|
icon={groupMembershipIcon}
|
|
79
154
|
style="height: {cardHeight}px;"
|
|
80
155
|
>
|
|
81
|
-
|
|
156
|
+
{@render userGroupMembership?.()}
|
|
82
157
|
</UserGroupMembership>
|
|
83
158
|
</div>
|
|
84
159
|
</div>
|
|
85
|
-
<div class="
|
|
160
|
+
<div class="row">
|
|
86
161
|
<div class="col-12">
|
|
87
162
|
<PermissionList
|
|
88
163
|
{siteLabel}
|
|
@@ -93,7 +168,7 @@ let cardHeight;
|
|
|
93
168
|
icon={permissionListIcon}
|
|
94
169
|
cardHeaderTitle={permissionListCardHeaderTitle}
|
|
95
170
|
>
|
|
96
|
-
|
|
171
|
+
{@render permissionList?.()}
|
|
97
172
|
</PermissionList>
|
|
98
173
|
</div>
|
|
99
174
|
</div>
|
|
@@ -1,53 +1,40 @@
|
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
|
2
1
|
import type { ErrorFn, IconName, UserSites, SuccessFn, SiteLabel, UserAccount, Permissions, GroupMembership, CanToggleActive, DeactivateUserFn, CanEditSiteAccess, SiteAccessChangeFn, PermissionValueMap, CanEditAccountInfo, ConfirmPasswordSetFn, AccountInfoChangedFn, CanEditGroupMembership, PasswordValidationRules, GroupMembershipChangeFn, PermissionValueChangeFn, GroupPermissionValueMap, GenerateNewActivationPINFn, DoSendPasswordRecoveryToken, SendPasswordRecoveryTokenFn, HasPermissionToChangePassword, PermissionListCardHeaderTitle } from './util';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
};
|
|
39
|
-
slots: {
|
|
40
|
-
userAccountInfo: {};
|
|
41
|
-
siteAccess: {};
|
|
42
|
-
userGroupMembership: {};
|
|
43
|
-
permissionList: {};
|
|
44
|
-
};
|
|
45
|
-
exports?: {} | undefined;
|
|
46
|
-
bindings?: string | undefined;
|
|
47
|
-
};
|
|
48
|
-
export type UserConfigurationProps = typeof __propDef.props;
|
|
49
|
-
export type UserConfigurationEvents = typeof __propDef.events;
|
|
50
|
-
export type UserConfigurationSlots = typeof __propDef.slots;
|
|
51
|
-
export default class UserConfiguration extends SvelteComponent<UserConfigurationProps, UserConfigurationEvents, UserConfigurationSlots> {
|
|
2
|
+
interface Props {
|
|
3
|
+
siteLabel?: SiteLabel;
|
|
4
|
+
userAccountInfoIcon?: IconName;
|
|
5
|
+
groupMembershipIcon?: IconName;
|
|
6
|
+
permissionListIcon?: IconName;
|
|
7
|
+
userSiteAccessIcon?: IconName;
|
|
8
|
+
permissionListCardHeaderTitle?: PermissionListCardHeaderTitle;
|
|
9
|
+
usernameInput?: HTMLInputElement | undefined;
|
|
10
|
+
userAccount: UserAccount;
|
|
11
|
+
canToggleActive?: CanToggleActive;
|
|
12
|
+
canEditAccountInfo?: CanEditAccountInfo;
|
|
13
|
+
doSendPasswordRecoveryToken?: DoSendPasswordRecoveryToken;
|
|
14
|
+
hasPermissionToChangePassword?: HasPermissionToChangePassword;
|
|
15
|
+
passwordValidationRules?: PasswordValidationRules | undefined;
|
|
16
|
+
error?: ErrorFn;
|
|
17
|
+
success?: SuccessFn;
|
|
18
|
+
deactivateUser?: DeactivateUserFn;
|
|
19
|
+
confirmPasswordSet?: ConfirmPasswordSetFn | undefined;
|
|
20
|
+
accountInfoChanged?: AccountInfoChangedFn;
|
|
21
|
+
sendPasswordRecoveryToken?: SendPasswordRecoveryTokenFn;
|
|
22
|
+
generateNewActivationPIN?: GenerateNewActivationPINFn;
|
|
23
|
+
userSites: UserSites;
|
|
24
|
+
canEditSiteAccess?: CanEditSiteAccess;
|
|
25
|
+
siteAccessChange?: SiteAccessChangeFn;
|
|
26
|
+
groupMembership: GroupMembership;
|
|
27
|
+
canEditGroupMembership?: CanEditGroupMembership;
|
|
28
|
+
groupMembershipChange?: GroupMembershipChangeFn;
|
|
29
|
+
permissions: Permissions;
|
|
30
|
+
permissionValueMap?: PermissionValueMap;
|
|
31
|
+
groupPermissionValueMap?: GroupPermissionValueMap;
|
|
32
|
+
permissionValueChange?: PermissionValueChangeFn;
|
|
33
|
+
userAccountInfo?: import('svelte').Snippet;
|
|
34
|
+
siteAccess?: import('svelte').Snippet;
|
|
35
|
+
userGroupMembership?: import('svelte').Snippet;
|
|
36
|
+
permissionList?: import('svelte').Snippet;
|
|
52
37
|
}
|
|
53
|
-
|
|
38
|
+
declare const UserConfiguration: import("svelte").Component<Props, {}, "doSendPasswordRecoveryToken" | "userAccount" | "usernameInput">;
|
|
39
|
+
type UserConfiguration = ReturnType<typeof UserConfiguration>;
|
|
40
|
+
export default UserConfiguration;
|
|
@@ -1,40 +1,64 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { i18n } from 'i18next'
|
|
3
|
+
import type { IconName, HTMLDivAttributes } from './'
|
|
4
|
+
|
|
5
|
+
import { getContext } from 'svelte'
|
|
6
|
+
import Icon from '@isoftdata/svelte-icon'
|
|
7
|
+
import Checkbox from '@isoftdata/svelte-checkbox'
|
|
8
|
+
import { translate as defaultTranslate } from '@isoftdata/utility-string'
|
|
9
|
+
|
|
10
|
+
const { t: translate } = getContext<i18n>('i18next') || { t: defaultTranslate }
|
|
11
|
+
|
|
12
|
+
interface GroupMembership {
|
|
13
|
+
id: number
|
|
14
|
+
name: string
|
|
15
|
+
isMember: boolean
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface Props extends HTMLDivAttributes {
|
|
19
|
+
groupMembership: Array<GroupMembership>
|
|
20
|
+
canEditGroupMembership?: boolean
|
|
21
|
+
groupMembershipChange?: ((groupMembership: GroupMembership) => void | Promise<void>) | undefined
|
|
22
|
+
icon?: IconName
|
|
23
|
+
children?: import('svelte').Snippet
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
let {
|
|
27
|
+
groupMembership,
|
|
28
|
+
canEditGroupMembership = true,
|
|
29
|
+
groupMembershipChange = undefined,
|
|
30
|
+
icon = 'users',
|
|
31
|
+
children,
|
|
32
|
+
...rest
|
|
33
|
+
}: Props = $props()
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<div
|
|
37
|
+
class="card"
|
|
38
|
+
{...rest}
|
|
39
|
+
>
|
|
40
|
+
<div class="card-header">
|
|
41
|
+
<h5 class="mb-0">
|
|
42
|
+
<Icon {icon} />
|
|
43
|
+
{translate('configuration.user.groupMembership', 'Group Membership')}
|
|
44
|
+
</h5>
|
|
45
|
+
</div>
|
|
46
|
+
<ul
|
|
47
|
+
class="list-group list-group-flush h-100"
|
|
48
|
+
style="overflow-y: auto;"
|
|
49
|
+
>
|
|
50
|
+
{#each groupMembership as { id, name, isMember }, index (id)}
|
|
51
|
+
<li class="list-group-item">
|
|
52
|
+
<Checkbox
|
|
53
|
+
label={name}
|
|
54
|
+
bind:checked={groupMembership[index].isMember}
|
|
55
|
+
disabled={!canEditGroupMembership}
|
|
56
|
+
onchange={async () => {
|
|
57
|
+
await groupMembershipChange?.({ id, name, isMember })
|
|
58
|
+
}}
|
|
59
|
+
/>
|
|
60
|
+
</li>
|
|
61
|
+
{/each}
|
|
62
|
+
</ul>
|
|
63
|
+
{@render children?.()}
|
|
64
|
+
</div>
|
|
@@ -1,32 +1,16 @@
|
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
|
2
1
|
import type { IconName, HTMLDivAttributes } from './';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
name: string;
|
|
8
|
-
isMember: boolean;
|
|
9
|
-
}>;
|
|
10
|
-
canEditGroupMembership?: boolean;
|
|
11
|
-
groupMembershipChange?: ((groupMembership: {
|
|
12
|
-
id: number;
|
|
13
|
-
name: string;
|
|
14
|
-
isMember: boolean;
|
|
15
|
-
}) => void | Promise<void>) | undefined;
|
|
16
|
-
icon?: IconName;
|
|
17
|
-
};
|
|
18
|
-
events: {
|
|
19
|
-
[evt: string]: CustomEvent<any>;
|
|
20
|
-
};
|
|
21
|
-
slots: {
|
|
22
|
-
default: {};
|
|
23
|
-
};
|
|
24
|
-
exports?: {} | undefined;
|
|
25
|
-
bindings?: string | undefined;
|
|
26
|
-
};
|
|
27
|
-
export type UserGroupMembershipProps = typeof __propDef.props;
|
|
28
|
-
export type UserGroupMembershipEvents = typeof __propDef.events;
|
|
29
|
-
export type UserGroupMembershipSlots = typeof __propDef.slots;
|
|
30
|
-
export default class UserGroupMembership extends SvelteComponent<UserGroupMembershipProps, UserGroupMembershipEvents, UserGroupMembershipSlots> {
|
|
2
|
+
interface GroupMembership {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
isMember: boolean;
|
|
31
6
|
}
|
|
32
|
-
|
|
7
|
+
interface Props extends HTMLDivAttributes {
|
|
8
|
+
groupMembership: Array<GroupMembership>;
|
|
9
|
+
canEditGroupMembership?: boolean;
|
|
10
|
+
groupMembershipChange?: ((groupMembership: GroupMembership) => void | Promise<void>) | undefined;
|
|
11
|
+
icon?: IconName;
|
|
12
|
+
children?: import('svelte').Snippet;
|
|
13
|
+
}
|
|
14
|
+
declare const UserGroupMembership: import("svelte").Component<Props, {}, "">;
|
|
15
|
+
type UserGroupMembership = ReturnType<typeof UserGroupMembership>;
|
|
16
|
+
export default UserGroupMembership;
|
|
@@ -1,38 +1,65 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
</
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte'
|
|
3
|
+
import type { i18n } from 'i18next'
|
|
4
|
+
import type { IconName, HTMLDivAttributes, SiteLabel } from './'
|
|
5
|
+
|
|
6
|
+
import { getContext } from 'svelte'
|
|
7
|
+
import Icon from '@isoftdata/svelte-icon'
|
|
8
|
+
import Checkbox from '@isoftdata/svelte-checkbox'
|
|
9
|
+
import { translate as defaultTranslate } from '@isoftdata/utility-string'
|
|
10
|
+
|
|
11
|
+
const { t: translate } = getContext<i18n>('i18next') || { t: defaultTranslate }
|
|
12
|
+
|
|
13
|
+
interface SiteAccess {
|
|
14
|
+
id: number
|
|
15
|
+
code: string
|
|
16
|
+
name: string
|
|
17
|
+
isAuthorized: boolean
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface Props extends HTMLDivAttributes {
|
|
21
|
+
userSites: Array<SiteAccess>
|
|
22
|
+
siteLabel?: SiteLabel
|
|
23
|
+
canEditSiteAccess?: boolean
|
|
24
|
+
siteAccessChange?: ((siteAccess: SiteAccess) => void | Promise<void>) | undefined
|
|
25
|
+
icon?: IconName
|
|
26
|
+
children?: Snippet
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let {
|
|
30
|
+
userSites = $bindable(),
|
|
31
|
+
siteLabel = 'Site',
|
|
32
|
+
canEditSiteAccess = true,
|
|
33
|
+
siteAccessChange = undefined,
|
|
34
|
+
icon = 'industry-windows',
|
|
35
|
+
children,
|
|
36
|
+
...rest
|
|
37
|
+
}: Props = $props()
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<div
|
|
41
|
+
class="card"
|
|
42
|
+
{...rest}
|
|
43
|
+
>
|
|
44
|
+
<div class="card-header">
|
|
45
|
+
<h5 class="mb-0"><Icon {icon} /> {translate(`user.configuration.${siteLabel}Access`, `${siteLabel} Access`)}</h5>
|
|
46
|
+
</div>
|
|
47
|
+
<ul
|
|
48
|
+
class="list-group list-group-flush h-100"
|
|
49
|
+
style="overflow-y: auto"
|
|
50
|
+
>
|
|
51
|
+
{#each userSites as { code, name }, i (code)}
|
|
52
|
+
<li class="list-group-item">
|
|
53
|
+
<Checkbox
|
|
54
|
+
label="{code} - {name}"
|
|
55
|
+
bind:checked={userSites[i].isAuthorized}
|
|
56
|
+
disabled={!canEditSiteAccess}
|
|
57
|
+
onchange={async () => {
|
|
58
|
+
await siteAccessChange?.(userSites[i])
|
|
59
|
+
}}
|
|
60
|
+
/>
|
|
61
|
+
</li>
|
|
62
|
+
{/each}
|
|
63
|
+
</ul>
|
|
64
|
+
{@render children?.()}
|
|
65
|
+
</div>
|
|
@@ -1,35 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { IconName, HTMLDivAttributes, SiteLabel } from './';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
name: string;
|
|
9
|
-
isAuthorized: boolean;
|
|
10
|
-
}>;
|
|
11
|
-
siteLabel?: SiteLabel;
|
|
12
|
-
canEditSiteAccess?: boolean;
|
|
13
|
-
siteAccessChange?: ((siteAccess: {
|
|
14
|
-
id: number;
|
|
15
|
-
code: string;
|
|
16
|
-
name: string;
|
|
17
|
-
isAuthorized: boolean;
|
|
18
|
-
}) => void | Promise<void>) | undefined;
|
|
19
|
-
icon?: IconName;
|
|
20
|
-
};
|
|
21
|
-
events: {
|
|
22
|
-
[evt: string]: CustomEvent<any>;
|
|
23
|
-
};
|
|
24
|
-
slots: {
|
|
25
|
-
default: {};
|
|
26
|
-
};
|
|
27
|
-
exports?: {} | undefined;
|
|
28
|
-
bindings?: string | undefined;
|
|
29
|
-
};
|
|
30
|
-
export type UserSiteAccessProps = typeof __propDef.props;
|
|
31
|
-
export type UserSiteAccessEvents = typeof __propDef.events;
|
|
32
|
-
export type UserSiteAccessSlots = typeof __propDef.slots;
|
|
33
|
-
export default class UserSiteAccess extends SvelteComponent<UserSiteAccessProps, UserSiteAccessEvents, UserSiteAccessSlots> {
|
|
3
|
+
interface SiteAccess {
|
|
4
|
+
id: number;
|
|
5
|
+
code: string;
|
|
6
|
+
name: string;
|
|
7
|
+
isAuthorized: boolean;
|
|
34
8
|
}
|
|
35
|
-
|
|
9
|
+
interface Props extends HTMLDivAttributes {
|
|
10
|
+
userSites: Array<SiteAccess>;
|
|
11
|
+
siteLabel?: SiteLabel;
|
|
12
|
+
canEditSiteAccess?: boolean;
|
|
13
|
+
siteAccessChange?: ((siteAccess: SiteAccess) => void | Promise<void>) | undefined;
|
|
14
|
+
icon?: IconName;
|
|
15
|
+
children?: Snippet;
|
|
16
|
+
}
|
|
17
|
+
declare const UserSiteAccess: import("svelte").Component<Props, {}, "userSites">;
|
|
18
|
+
type UserSiteAccess = ReturnType<typeof UserSiteAccess>;
|
|
19
|
+
export default UserSiteAccess;
|
package/dist/util.d.ts
CHANGED
|
@@ -30,28 +30,28 @@ export type HTMLDivAttributes = HTMLAttributes<HTMLDivElement>;
|
|
|
30
30
|
export type SiteLabel = string;
|
|
31
31
|
export type PermissionValue = 'NONE' | 'SITE' | 'GLOBAL';
|
|
32
32
|
export declare const valueRank: Record<PermissionValue, number>;
|
|
33
|
-
export type GenerateNewActivationPINFn = ComponentProps<UserAccountInfo>['generateNewActivationPIN'];
|
|
34
|
-
export type SuccessFn = ComponentProps<UserAccountInfo>['success'];
|
|
35
|
-
export type ErrorFn = ComponentProps<UserAccountInfo>['error'];
|
|
36
|
-
export type AccountInfoChangedFn = ComponentProps<UserAccountInfo>['accountInfoChanged'];
|
|
37
|
-
export type CanEditAccountInfo = ComponentProps<UserAccountInfo>['canEditAccountInfo'];
|
|
38
|
-
export type CanToggleActive = ComponentProps<UserAccountInfo>['canToggleActive'];
|
|
39
|
-
export type HasPermissionToChangePassword = ComponentProps<UserAccountInfo>['hasPermissionToChangePassword'];
|
|
40
|
-
export type ConfirmPasswordSetFn = ComponentProps<PasswordSetModal>['confirmPasswordSet'];
|
|
41
|
-
export type DeactivateUserFn = ComponentProps<DeactivateUserModal>['deactivateUser'];
|
|
42
|
-
export type DoSendPasswordRecoveryToken = ComponentProps<PasswordRecoveryModal>['doSendPasswordRecoveryToken'];
|
|
43
|
-
export type SendPasswordRecoveryTokenFn = ComponentProps<PasswordRecoveryModal>['sendPasswordRecoveryToken'];
|
|
44
|
-
export type UserSites = ComponentProps<UserSiteAccess>['userSites'];
|
|
45
|
-
export type CanEditSiteAccess = ComponentProps<UserSiteAccess>['canEditSiteAccess'];
|
|
46
|
-
export type SiteAccessChangeFn = ComponentProps<UserSiteAccess>['siteAccessChange'];
|
|
47
|
-
export type GroupMembership = ComponentProps<UserGroupMembership>['groupMembership'];
|
|
48
|
-
export type GroupMembershipChangeFn = ComponentProps<UserGroupMembership>['groupMembershipChange'];
|
|
49
|
-
export type CanEditGroupMembership = ComponentProps<UserGroupMembership>['canEditGroupMembership'];
|
|
50
|
-
export type Permissions = ComponentProps<PermissionList>['permissions'];
|
|
51
|
-
export type PermissionValueMap = ComponentProps<PermissionList>['permissionValueMap'];
|
|
52
|
-
export type GroupPermissionValueMap = ComponentProps<PermissionList>['groupPermissionValueMap'];
|
|
53
|
-
export type PermissionValueChangeFn = ComponentProps<PermissionList>['permissionValueChange'];
|
|
54
|
-
export type PermissionListCardHeaderTitle = ComponentProps<PermissionList>['cardHeaderTitle'];
|
|
33
|
+
export type GenerateNewActivationPINFn = ComponentProps<typeof UserAccountInfo>['generateNewActivationPIN'];
|
|
34
|
+
export type SuccessFn = ComponentProps<typeof UserAccountInfo>['success'];
|
|
35
|
+
export type ErrorFn = ComponentProps<typeof UserAccountInfo>['error'];
|
|
36
|
+
export type AccountInfoChangedFn = ComponentProps<typeof UserAccountInfo>['accountInfoChanged'];
|
|
37
|
+
export type CanEditAccountInfo = ComponentProps<typeof UserAccountInfo>['canEditAccountInfo'];
|
|
38
|
+
export type CanToggleActive = ComponentProps<typeof UserAccountInfo>['canToggleActive'];
|
|
39
|
+
export type HasPermissionToChangePassword = ComponentProps<typeof UserAccountInfo>['hasPermissionToChangePassword'];
|
|
40
|
+
export type ConfirmPasswordSetFn = ComponentProps<typeof PasswordSetModal>['confirmPasswordSet'];
|
|
41
|
+
export type DeactivateUserFn = ComponentProps<typeof DeactivateUserModal>['deactivateUser'];
|
|
42
|
+
export type DoSendPasswordRecoveryToken = ComponentProps<typeof PasswordRecoveryModal>['doSendPasswordRecoveryToken'];
|
|
43
|
+
export type SendPasswordRecoveryTokenFn = ComponentProps<typeof PasswordRecoveryModal>['sendPasswordRecoveryToken'];
|
|
44
|
+
export type UserSites = ComponentProps<typeof UserSiteAccess>['userSites'];
|
|
45
|
+
export type CanEditSiteAccess = ComponentProps<typeof UserSiteAccess>['canEditSiteAccess'];
|
|
46
|
+
export type SiteAccessChangeFn = ComponentProps<typeof UserSiteAccess>['siteAccessChange'];
|
|
47
|
+
export type GroupMembership = ComponentProps<typeof UserGroupMembership>['groupMembership'];
|
|
48
|
+
export type GroupMembershipChangeFn = ComponentProps<typeof UserGroupMembership>['groupMembershipChange'];
|
|
49
|
+
export type CanEditGroupMembership = ComponentProps<typeof UserGroupMembership>['canEditGroupMembership'];
|
|
50
|
+
export type Permissions = ComponentProps<typeof PermissionList>['permissions'];
|
|
51
|
+
export type PermissionValueMap = ComponentProps<typeof PermissionList>['permissionValueMap'];
|
|
52
|
+
export type GroupPermissionValueMap = ComponentProps<typeof PermissionList>['groupPermissionValueMap'];
|
|
53
|
+
export type PermissionValueChangeFn = ComponentProps<typeof PermissionList>['permissionValueChange'];
|
|
54
|
+
export type PermissionListCardHeaderTitle = ComponentProps<typeof PermissionList>['cardHeaderTitle'];
|
|
55
55
|
/** Returns a Map where the key is the `permissioniId` and the value is the highest permission level for the given group membership
|
|
56
56
|
*
|
|
57
57
|
* You'll probably want to call this in your code when the group membership changes, and pass the result to the `groupPermissionValueMap` prop of the `PermissionList` component.
|