|
8 | 8 | import { sdk } from '$lib/stores/sdk'; |
9 | 9 | import { Typography, Link, Layout } from '@appwrite.io/pink-svelte'; |
10 | 10 | import type { Models } from '@appwrite.io/console'; |
11 | | - import { tick } from 'svelte'; |
| 11 | + import { onMount } from 'svelte'; |
12 | 12 |
|
13 | | - let { project }: { project: Models.Project } = $props(); |
| 13 | + let { |
| 14 | + project |
| 15 | + }: { |
| 16 | + project: Models.Project; |
| 17 | + } = $props(); |
14 | 18 |
|
| 19 | + let lastValidLimit = $state(5); |
15 | 20 | let passwordHistory = $state(5); |
16 | | - let passwordHistoryEnabled = $state(false); |
17 | 21 | let passwordDictionary = $state(false); |
| 22 | + let passwordHistoryEnabled = $state(false); |
18 | 23 | let authPersonalDataCheck = $state(false); |
19 | | - let lastValidLimit = $state(5); |
20 | | -
|
21 | | - let maxPasswordInputField: InputNumber | null = null; |
22 | 24 |
|
23 | | - // Initialize and sync state when project updates |
24 | | - $effect(() => { |
25 | | - const historyValue = project?.authPasswordHistory; |
| 25 | + onMount(() => { |
| 26 | + // update initial states here in onMount. |
| 27 | + const historyValue = project.authPasswordHistory; |
26 | 28 | if (historyValue && historyValue > 0) { |
27 | 29 | passwordHistory = historyValue; |
28 | 30 | lastValidLimit = historyValue; |
29 | 31 | } |
| 32 | +
|
30 | 33 | passwordHistoryEnabled = (historyValue ?? 0) !== 0; |
31 | | - passwordDictionary = project?.authPasswordDictionary ?? false; |
32 | | - authPersonalDataCheck = project?.authPersonalDataCheck ?? false; |
| 34 | + passwordDictionary = project.authPasswordDictionary ?? false; |
| 35 | + authPersonalDataCheck = project.authPersonalDataCheck ?? false; |
33 | 36 | }); |
34 | 37 |
|
35 | | - // restore last valid limit when enabling |
36 | 38 | $effect(() => { |
| 39 | + // restore last valid limit when enabling |
37 | 40 | if (passwordHistoryEnabled && passwordHistory < 1) { |
38 | 41 | passwordHistory = lastValidLimit; |
39 | 42 | } |
40 | 43 | }); |
41 | 44 |
|
42 | | - $effect(() => { |
43 | | - if (passwordHistoryEnabled) { |
44 | | - tick().then(() => { |
45 | | - if (maxPasswordInputField) { |
46 | | - maxPasswordInputField.addInputFocus(); |
47 | | - } |
48 | | - }); |
49 | | - } |
50 | | - }); |
| 45 | + const hasChanges = $derived.by(() => { |
| 46 | + const dictChanged = passwordDictionary !== (project.authPasswordDictionary ?? false); |
| 47 | + const dataCheckChanged = authPersonalDataCheck !== (project.authPersonalDataCheck ?? false); |
| 48 | + const historyChanged = |
| 49 | + passwordHistoryEnabled !== ((project.authPasswordHistory ?? 0) !== 0); |
| 50 | + const limitChanged = |
| 51 | + passwordHistoryEnabled && |
| 52 | + Number(passwordHistory) !== (project.authPasswordHistory ?? 0); |
51 | 53 |
|
52 | | - const hasChanges = $derived( |
53 | | - passwordHistoryEnabled !== ((project?.authPasswordHistory ?? 0) !== 0) || |
54 | | - (passwordHistoryEnabled && passwordHistory !== (project?.authPasswordHistory ?? 0)) || |
55 | | - passwordDictionary !== (project?.authPasswordDictionary ?? false) || |
56 | | - authPersonalDataCheck !== (project?.authPersonalDataCheck ?? false) |
57 | | - ); |
| 54 | + return historyChanged || dictChanged || dataCheckChanged || limitChanged; |
| 55 | + }); |
58 | 56 |
|
59 | 57 | async function updatePasswordPolicies() { |
60 | 58 | try { |
61 | | - await sdk.forConsole.projects.updateAuthPasswordHistory({ |
| 59 | + const projectSdk = sdk.forConsole.projects; |
| 60 | +
|
| 61 | + await projectSdk.updateAuthPasswordHistory({ |
62 | 62 | projectId: project.$id, |
63 | 63 | limit: passwordHistoryEnabled ? passwordHistory : 0 |
64 | 64 | }); |
65 | | - await sdk.forConsole.projects.updateAuthPasswordDictionary({ |
| 65 | +
|
| 66 | + await projectSdk.updateAuthPasswordDictionary({ |
66 | 67 | projectId: project.$id, |
67 | 68 | enabled: passwordDictionary |
68 | 69 | }); |
69 | | - await sdk.forConsole.projects.updatePersonalDataCheck({ |
| 70 | +
|
| 71 | + await projectSdk.updatePersonalDataCheck({ |
70 | 72 | projectId: project.$id, |
71 | 73 | enabled: authPersonalDataCheck |
72 | 74 | }); |
|
108 | 110 | required |
109 | 111 | max={20} |
110 | 112 | min={1} |
111 | | - id="password-history" |
| 113 | + autofocus |
112 | 114 | label="Limit" |
| 115 | + id="password-history" |
113 | 116 | bind:value={passwordHistory} |
114 | | - bind:this={maxPasswordInputField} |
115 | 117 | helper="Maximum 20 passwords." /> |
116 | 118 | {/if} |
117 | 119 | </Layout.Stack> |
|
0 commit comments