@umbraco-cms/backoffice 18.0.0-rc2 → 18.0.0-rc3
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/dist-cms/apps/app/app.element.js +6 -1
- package/dist-cms/assets/lang/de.js +1 -1
- package/dist-cms/assets/lang/fr.js +1 -1
- package/dist-cms/assets/lang/nb.js +1 -1
- package/dist-cms/assets/lang/nl.js +1 -1
- package/dist-cms/assets/lang/sv.js +1 -1
- package/dist-cms/libs/extension-api/initializers/extension-initializer-base.js +26 -2
- package/dist-cms/packages/content/content-type/workspace/views/design/content-type-design-editor-tab.element.js +1 -0
- package/dist-cms/packages/core/collection/components/pagination/collection-pagination.element.js +1 -2
- package/dist-cms/packages/core/components/multiple-text-string-input/input-multiple-text-string-item.element.js +18 -1
- package/dist-cms/packages/core/picker/search/picker-search-result.element.js +1 -2
- package/dist-cms/packages/documents/document-redirect-management/dashboard-redirect-management.element.js +0 -4
- package/dist-cms/packages/documents/documents/audit-log/info-app/document-history-workspace-info-app.element.js +0 -3
- package/dist-cms/packages/log-viewer/workspace/views/search/components/log-viewer-messages-list.element.js +0 -1
- package/dist-cms/packages/media/media/audit-log/info-app/media-history-workspace-info-app.element.js +0 -3
- package/dist-cms/packages/media/media/modals/media-picker/media-picker-modal.element.js +0 -1
- package/dist-cms/packages/members/member-group/components/member-group-picker-modal/member-group-picker-modal.element.js +0 -1
- package/dist-cms/packages/packages/package-section/views/created/packages-created-overview.element.js +0 -3
- package/dist-cms/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.js +0 -1
- package/dist-cms/packages/relations/relations/reference/workspace-info-app/entity-references-workspace-view-info.element.js +0 -5
- package/dist-cms/packages/user/current-user/history/current-user-history-user-profile-app.element.js +0 -2
- package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -219,7 +219,7 @@ let UmbAppElement = class UmbAppElement extends UmbLitElement {
|
|
|
219
219
|
onInit(this, umbExtensionsRegistry);
|
|
220
220
|
// Register public extensions (login extensions)
|
|
221
221
|
await new UmbServerExtensionRegistrator(this, umbExtensionsRegistry).registerPublicExtensions();
|
|
222
|
-
new UmbAppEntryPointExtensionInitializer(this, umbExtensionsRegistry);
|
|
222
|
+
const entryPointInitializer = new UmbAppEntryPointExtensionInitializer(this, umbExtensionsRegistry);
|
|
223
223
|
// Try to initialise the auth flow and get the runtime status
|
|
224
224
|
try {
|
|
225
225
|
// If the runtime level is "install" or ?status=false is set, we should clear any cached tokens
|
|
@@ -232,6 +232,11 @@ let UmbAppElement = class UmbAppElement extends UmbLitElement {
|
|
|
232
232
|
else {
|
|
233
233
|
await this.#setAuthStatus();
|
|
234
234
|
}
|
|
235
|
+
// The login screen decides which auth provider to use from the registered
|
|
236
|
+
// `authProvider` extensions. App-entry-points may register or unregister those during
|
|
237
|
+
// their async onInit, so wait for them to settle before routing — otherwise on a slow
|
|
238
|
+
// connection the decision races and falls back to the local login.
|
|
239
|
+
await this.observe(entryPointInitializer.loaded).asPromise();
|
|
235
240
|
// Initialise the router
|
|
236
241
|
this.#redirect();
|
|
237
242
|
}
|
|
@@ -967,7 +967,7 @@ export default {
|
|
|
967
967
|
greeting5: 'Willkommen',
|
|
968
968
|
greeting6: 'Willkommen',
|
|
969
969
|
instruction: 'Hier anmelden:',
|
|
970
|
-
signInWith: 'Anmelden mit',
|
|
970
|
+
signInWith: 'Anmelden mit {0}',
|
|
971
971
|
timeout: 'Sitzung abgelaufen',
|
|
972
972
|
forgottenPassword: 'Kennwort vergessen?',
|
|
973
973
|
forgottenPasswordInstruction: 'Es wird eine E-Mail mit einem Kennwort-Zurücksetzen-Link an die angegebene Adresse geschickt.',
|
|
@@ -848,7 +848,7 @@ export default {
|
|
|
848
848
|
greeting5: 'Bienvenue',
|
|
849
849
|
greeting6: 'Bienvenue',
|
|
850
850
|
instruction: 'Connectez-vous ci-dessous',
|
|
851
|
-
signInWith: 'Identifiez-vous avec',
|
|
851
|
+
signInWith: 'Identifiez-vous avec {0}',
|
|
852
852
|
timeout: 'La session a expiré',
|
|
853
853
|
forgottenPassword: 'Mot de passe oublié?',
|
|
854
854
|
forgottenPasswordInstruction: "Un email contenant un lien pour ré-initialiser votre mot de passe sera envoyé à l'adresse spécifiée",
|
|
@@ -660,7 +660,7 @@ export default {
|
|
|
660
660
|
greeting5: 'Velkommen',
|
|
661
661
|
greeting6: 'Velkommen',
|
|
662
662
|
instruction: 'Logg på nedenfor',
|
|
663
|
-
signInWith: 'Logg på med',
|
|
663
|
+
signInWith: 'Logg på med {0}',
|
|
664
664
|
timeout: 'Din sesjon er utløpt',
|
|
665
665
|
continue: 'Fortsett',
|
|
666
666
|
validate: 'Valider',
|
|
@@ -866,7 +866,7 @@ export default {
|
|
|
866
866
|
greeting5: 'Welkom',
|
|
867
867
|
greeting6: 'Welkom',
|
|
868
868
|
instruction: 'log hieronder in',
|
|
869
|
-
signInWith: 'Inloggen met',
|
|
869
|
+
signInWith: 'Inloggen met {0}',
|
|
870
870
|
timeout: 'Sessie is verlopen',
|
|
871
871
|
forgottenPassword: 'Wachtwoord vergeten?',
|
|
872
872
|
forgottenPasswordInstruction: 'Er zal een e-mail worden gestuurd naar het e-mailadres van jouw account.\n Hierin staat een link om je wachtwoord te resetten\n ',
|
|
@@ -643,7 +643,7 @@ export default {
|
|
|
643
643
|
greeting5: 'Välkommen',
|
|
644
644
|
greeting6: 'Välkommen',
|
|
645
645
|
instruction: 'Logga in nedan',
|
|
646
|
-
signInWith: 'Logga in med',
|
|
646
|
+
signInWith: 'Logga in med {0}',
|
|
647
647
|
timeout: 'Sessionen har nått sin maxgräns',
|
|
648
648
|
continue: 'Fortsätt',
|
|
649
649
|
validate: 'Validera',
|
|
@@ -7,28 +7,52 @@ export class UmbExtensionInitializerBase extends UmbControllerBase {
|
|
|
7
7
|
#extensionMap;
|
|
8
8
|
// Use the value `undefined`, as that would not resolve a observation promise. [NL]
|
|
9
9
|
#loaded;
|
|
10
|
+
// Identifies the current processing pass. The observer callback is async, so passes can
|
|
11
|
+
// overlap; only the latest pass is allowed to settle `loaded`, so a slower earlier pass
|
|
12
|
+
// cannot unblock waiters before the newest set of extensions has finished instantiating.
|
|
13
|
+
#loadPass;
|
|
10
14
|
constructor(host, extensionRegistry, manifestType) {
|
|
11
15
|
super(host);
|
|
12
16
|
this.#extensionMap = new Map();
|
|
13
17
|
// Use the value `undefined`, as that would not resolve a observation promise. [NL]
|
|
14
18
|
this.#loaded = new UmbBooleanState(undefined);
|
|
15
19
|
this.loaded = this.#loaded.asObservable();
|
|
20
|
+
// Identifies the current processing pass. The observer callback is async, so passes can
|
|
21
|
+
// overlap; only the latest pass is allowed to settle `loaded`, so a slower earlier pass
|
|
22
|
+
// cannot unblock waiters before the newest set of extensions has finished instantiating.
|
|
23
|
+
this.#loadPass = 0;
|
|
16
24
|
this.host = host;
|
|
17
25
|
this.extensionRegistry = extensionRegistry;
|
|
18
26
|
this.observe(extensionRegistry.byType(manifestType), async (extensions) => {
|
|
27
|
+
const pass = ++this.#loadPass;
|
|
28
|
+
// Re-arm while this pass is in flight so a consumer awaiting `loaded` waits for it to
|
|
29
|
+
// finish instead of resolving on a stale `true` from a previous pass. `undefined`
|
|
30
|
+
// rather than `false` because `asPromise()` resolves on the first non-undefined value.
|
|
31
|
+
this.#loaded.setValue(undefined);
|
|
19
32
|
this.#extensionMap.forEach((existingExt) => {
|
|
20
33
|
if (!extensions.find((b) => b.alias === existingExt.alias)) {
|
|
21
34
|
this.unloadExtension(existingExt);
|
|
22
35
|
this.#extensionMap.delete(existingExt.alias);
|
|
23
36
|
}
|
|
24
37
|
});
|
|
25
|
-
|
|
38
|
+
// `allSettled` so a throwing/rejecting `instantiateExtension` cannot leave `loaded`
|
|
39
|
+
// stuck at `undefined` and hang a waiter (e.g. the app boot gate). Failures are
|
|
40
|
+
// surfaced rather than swallowed.
|
|
41
|
+
const results = await Promise.allSettled(extensions.map((extension) => {
|
|
26
42
|
if (this.#extensionMap.has(extension.alias))
|
|
27
43
|
return;
|
|
28
44
|
this.#extensionMap.set(extension.alias, extension);
|
|
29
45
|
return this.instantiateExtension(extension);
|
|
30
46
|
}));
|
|
31
|
-
|
|
47
|
+
for (const result of results) {
|
|
48
|
+
if (result.status === 'rejected') {
|
|
49
|
+
console.error('[UmbExtensionInitializer] Failed to instantiate extension', result.reason);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Only the latest pass settles `loaded`. Resolving unconditionally — including for
|
|
53
|
+
// zero extensions — so a consumer awaiting `loaded` (the app-entry-point boot gate,
|
|
54
|
+
// the bundle guard) never hangs on a default install that registers none of this type.
|
|
55
|
+
if (pass === this.#loadPass) {
|
|
32
56
|
this.#loaded.setValue(true);
|
|
33
57
|
}
|
|
34
58
|
});
|
|
@@ -95,7 +95,6 @@ let UmbInputMultipleTextStringItemElement = class UmbInputMultipleTextStringItem
|
|
|
95
95
|
<uui-button
|
|
96
96
|
compact
|
|
97
97
|
label="${this.localize.term('general_remove')} ${this.value}"
|
|
98
|
-
look="outline"
|
|
99
98
|
?disabled=${this.disabled}
|
|
100
99
|
@click=${this.#onDelete}>
|
|
101
100
|
<uui-icon name="icon-trash"></uui-icon>
|
|
@@ -114,6 +113,7 @@ let UmbInputMultipleTextStringItemElement = class UmbInputMultipleTextStringItem
|
|
|
114
113
|
|
|
115
114
|
#validation-message {
|
|
116
115
|
flex: 1;
|
|
116
|
+
margin-bottom: calc(var(--uui-size-1) * -1);
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
#input {
|
|
@@ -122,11 +122,28 @@ let UmbInputMultipleTextStringItemElement = class UmbInputMultipleTextStringItem
|
|
|
122
122
|
|
|
123
123
|
.handle {
|
|
124
124
|
cursor: grab;
|
|
125
|
+
opacity: 0.6;
|
|
126
|
+
transition: opacity 120ms;
|
|
125
127
|
}
|
|
126
128
|
|
|
127
129
|
.handle:active {
|
|
128
130
|
cursor: grabbing;
|
|
129
131
|
}
|
|
132
|
+
|
|
133
|
+
uui-button {
|
|
134
|
+
opacity: 0;
|
|
135
|
+
transition: opacity 120ms;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
:host(:hover),
|
|
139
|
+
:host(:focus-within) {
|
|
140
|
+
uui-button {
|
|
141
|
+
opacity: 1;
|
|
142
|
+
}
|
|
143
|
+
.handle {
|
|
144
|
+
opacity: 1;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
130
147
|
`,
|
|
131
148
|
]; }
|
|
132
149
|
};
|
|
@@ -132,11 +132,6 @@ let UmbEntityReferencesWorkspaceInfoAppElement = class UmbEntityReferencesWorksp
|
|
|
132
132
|
justify-content: center;
|
|
133
133
|
margin-top: var(--uui-size-space-4);
|
|
134
134
|
}
|
|
135
|
-
|
|
136
|
-
uui-pagination {
|
|
137
|
-
flex: 1;
|
|
138
|
-
display: inline-block;
|
|
139
|
-
}
|
|
140
135
|
`,
|
|
141
136
|
]; }
|
|
142
137
|
};
|