${unsafeHTML(this.translator?.translate('authenticate.pages.login.create-webid'))}
@@ -96,14 +165,42 @@ export class AuthenticateRootComponent extends RxLitElement {
flex-direction: column;
justify-content: center;
align-items: center;
- gap: 80px;
background-color: var(--colors-primary-dark);
+ font-size: var(--font-size-small);
}
- authenticate-component {
+ :host > *:not(style) {
width: 400px;
max-width: 400px;
min-width: 400px;
}
+ .title-container {
+ height: 50px;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ gap: var(--gap-large);
+ color: var(--colors-foreground-inverse);
+ margin-bottom: var(--gap-large);
+ }
+ .title-container svg {
+ max-height: 50px;
+ height: 50px;
+ max-width: 50px;
+ width: 50px;
+ fill: var(--colors-foreground-inverse);
+ stroke: none !important;
+ }
+ .title-container h1 {
+ font-size: var(--font-size-header-normal);
+ font-weight: normal;
+ }
+ .alert-container {
+ margin-top: var(--gap-large);
+ }
+ authenticate-component {
+ margin: var(--gap-large) 0;
+ }
authenticate-component::part(provider) {
border: none;
background-color: var(--colors-primary-light);
@@ -113,7 +210,6 @@ export class AuthenticateRootComponent extends RxLitElement {
padding: 0 0 0 6.5rem;
margin: 0;
height: 40px;
- font-size: var(--font-size-small);
}
authenticate-component::part(webid-label) {
@@ -137,7 +233,6 @@ export class AuthenticateRootComponent extends RxLitElement {
--colors-foreground-light: white;
width: 75%;
}
-
authenticate-component::part(webid-button) {
border: none;
background-color: var(--colors-primary-light);
@@ -151,55 +246,32 @@ export class AuthenticateRootComponent extends RxLitElement {
height: var(--gap-large);
width: 60px;
}
-
authenticate-component::part(alert) {
height: var(--gap-small);
font-size: var(--font-size-small);
}
-
authenticate-component::part(loading) {
--colors-foreground-normal: var(--colors-foreground-light);
}
- .title-container {
- height: 50px;
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- gap: var(--gap-large);
- color: var(--colors-foreground-inverse);
- }
-
- .title-container svg {
- max-height: 50px;
- height: 50px;
- max-width: 50px;
- width: 50px;
- fill: var(--colors-foreground-inverse);
- stroke: none !important;
- }
-
- .title-container h1 {
- font-size: var(--font-size-header-normal);
- font-weight: normal;
+ authenticate-component::part(provider-logo) {
+ display: none;
}
-
nde-form-element label {
color: white;
}
-
+ .webid-container {
+ margin-top: var(--gap-large);
+ }
.webid-container p {
text-align: center;
color: var(--colors-foreground-light);
font-size: var(--font-size-small);
margin: 0;
}
-
.webid-container p a {
color: var(--colors-foreground-light);
}
-
svg {
stroke: var(--colors-foreground-light) !important;
} */
diff --git a/packages/solid-crs-manage/lib/features/authenticate/authenticate-setup.component.spec.ts b/packages/solid-crs-manage/lib/features/authenticate/authenticate-setup.component.spec.ts
index ca90c336..774a381a 100644
--- a/packages/solid-crs-manage/lib/features/authenticate/authenticate-setup.component.spec.ts
+++ b/packages/solid-crs-manage/lib/features/authenticate/authenticate-setup.component.spec.ts
@@ -1,10 +1,15 @@
-import { Collection, CollectionMemoryStore, CollectionObject, CollectionObjectMemoryStore, ConsoleLogger, LoggerLevel, SolidMockService } from '@netwerk-digitaal-erfgoed/solid-crs-core';
+/* eslint-disable @typescript-eslint/dot-notation */
+/* eslint-disable @typescript-eslint/no-explicit-any */
+import { SolidSDKService } from '@digita-ai/inrupt-solid-service';
+import { Collection, CollectionObject, CollectionObjectMemoryStore, CollectionSolidStore } from '@netwerk-digitaal-erfgoed/solid-crs-core';
import { interpret, Interpreter } from 'xstate';
-import { ClickedAdministratorTypeEvent, ClickedInstitutionTypeEvent } from '../../app.events';
-import { AppContext, appMachine } from '../../app.machine';
+import { ClickedAdministratorTypeEvent, ClickedCreatePodEvent, ClickedInstitutionTypeEvent, ClickedLogoutEvent, SetProfileEvent } from '../../app.events';
+import { AppContext, AppDataStates, appMachine, AppRootStates } from '../../app.machine';
+import * as services from '../../app.services';
import { AuthenticateSetupComponent } from './authenticate-setup.component';
-const solid = new SolidMockService(new ConsoleLogger(LoggerLevel.silly, LoggerLevel.silly));
+let solidService: SolidSDKService;
+let collectionStore: CollectionSolidStore;
describe('AuthenticateSetupComponent', () => {
@@ -19,22 +24,6 @@ describe('AuthenticateSetupComponent', () => {
distribution: 'test-uri',
};
- const collection2: Collection = {
- uri: 'collection-uri-1',
- name: 'Collection 1',
- description: 'This is collection 1',
- objectsUri: 'test-uri',
- distribution: 'test-uri',
- };
-
- const collection3: Collection = {
- uri: 'collection-uri-2',
- name: 'Collection 2',
- description: 'This is collection 2',
- objectsUri: 'test-uri',
- distribution: 'test-uri',
- };
-
const object1: CollectionObject = {
uri: 'object-uri-1',
name: 'Object 1',
@@ -46,14 +35,21 @@ describe('AuthenticateSetupComponent', () => {
collection: 'collection-uri-1',
};
- beforeEach(() => {
+ beforeEach(async () => {
+
+ solidService = {
+ getStorages: jest.fn(async () => [ 'https://storage.uri/' ]),
+ } as any;
+
+ collectionStore = {
+ getInstanceForClass: jest.fn(async () => undefined),
+ } as any;
+
+ (services.createPod as any) = jest.fn(async () => ({}));
machine = interpret(appMachine(
- solid,
- new CollectionMemoryStore([
- collection2,
- collection3,
- ]),
+ solidService,
+ collectionStore,
new CollectionObjectMemoryStore([
object1,
]),
@@ -63,11 +59,20 @@ describe('AuthenticateSetupComponent', () => {
.withContext({
alerts: [],
session: { webId: 'lorem' },
+ profile: {
+ name: 'Lea Peeters',
+ uri: 'https://web.id/',
+ },
}));
+ machine.onTransition(async () => await component.updateComplete);
+
component = window.document.createElement('nde-authenticate-setup') as AuthenticateSetupComponent;
component.actor = machine;
+ machine.start();
+ window.document.body.appendChild(component);
+ await component.updateComplete;
});
@@ -83,50 +88,174 @@ describe('AuthenticateSetupComponent', () => {
});
- it('should show two buttons', async () => {
+ describe('admin setup', () => {
- machine.start();
- window.document.body.appendChild(component);
- await component.updateComplete;
+ beforeEach(() => {
+
+ // set correct data state ()
+ machine.start();
+
+ machine.send(new SetProfileEvent());
+
+ });
+
+ it('should show two buttons', (done) => {
+
+ machine.onTransition((state) => {
+
+ if (state.matches({ [AppRootStates.DATA]: AppDataStates.DETERMINING_POD_TYPE })) {
+
+ const buttons = window.document.body.getElementsByTagName('nde-authenticate-setup')[0].shadowRoot.querySelector('div.form-container').children;
+ expect(buttons).toBeTruthy();
+ expect(buttons.length).toEqual(2);
+ done();
+
+ }
+
+ });
+
+ machine.start();
+
+ });
+
+ it('should send ClickedAdministratorTypeEvent when admin button is clicked', async () => {
+
+ machine.send(new ClickedCreatePodEvent());
+ component.actor.send = jest.fn();
+ window.document.body.appendChild(component);
+ await component.updateComplete;
+
+ machine.onTransition(async (state) => {
+
+ await component.updateComplete;
+
+ if (state.matches({ [AppRootStates.DATA]: AppDataStates.DETERMINING_POD_TYPE })) {
+
+ const button = window.document.body.getElementsByTagName('nde-authenticate-setup')[0].shadowRoot
+ .querySelector('div.form-container').children[0] as HTMLButtonElement;
+
+ button.click();
+ expect(component.actor.send).toHaveBeenCalledWith(new ClickedAdministratorTypeEvent());
- const buttons = window.document.body.getElementsByTagName('nde-authenticate-setup')[0].shadowRoot.querySelector('div.form-container').children;
+ }
- expect(buttons).toBeTruthy();
- expect(buttons.length).toEqual(2);
+ });
+
+ });
+
+ it('should send ClickedInstitutionTypeEvent when institution button is clicked', async () => {
+
+ machine.send(new ClickedCreatePodEvent());
+ component.actor.send = jest.fn();
+ window.document.body.appendChild(component);
+ await component.updateComplete;
+
+ machine.onTransition(async (state) => {
+
+ await component.updateComplete;
+
+ if (state.matches({ [AppRootStates.DATA]: AppDataStates.DETERMINING_POD_TYPE })) {
+
+ const button = component.shadowRoot.querySelector('div.form-container').children[1] as HTMLButtonElement;
+
+ button.click();
+ expect(component.actor.send).toHaveBeenCalledWith(new ClickedInstitutionTypeEvent());
+
+ }
+
+ });
+
+ });
});
- it('should send ClickedAdministratorTypeEvent when admin button is clicked', async () => {
+ describe('pod creation', () => {
- machine.start();
- window.document.body.appendChild(component);
- await component.updateComplete;
+ beforeEach(async () => {
+
+ solidService.getStorages = jest.fn(async () => [ ]);
+
+ machine = interpret(appMachine(
+ solidService,
+ collectionStore,
+ new CollectionObjectMemoryStore([
+ object1,
+ ]),
+ collection1,
+ object1
+ )
+ .withContext({
+ alerts: [],
+ session: { webId: 'lorem' },
+ profile: {
+ name: 'Lea Peeters',
+ uri: 'https://web.id/',
+ },
+ }));
+
+ component.actor = machine;
+
+ machine.start();
+
+ machine.send(new SetProfileEvent());
- const button = window.document.body.getElementsByTagName('nde-authenticate-setup')[0].shadowRoot
- .querySelector('div.form-container').children[0] as HTMLButtonElement;
+ });
- machine.send = jest.fn();
+ it('should show two buttons', async () => {
- button.click();
+ machine.onTransition(async (state) => {
- expect(machine.send).toHaveBeenCalledWith(new ClickedAdministratorTypeEvent());
+ if (state.matches({ [AppRootStates.DATA]: AppDataStates.AWAITING_POD_CREATION })) {
+
+ await component.updateComplete;
+ const buttons = component.shadowRoot.querySelectorAll('button');
+ expect(buttons).toBeTruthy();
+ expect(buttons.length).toEqual(2);
+
+ }
+
+ });
+
+ });
});
- it('should send ClickedInstitutionTypeEvent when institution button is clicked', async () => {
+ describe('onClickedCreatePod', () => {
- machine.start();
+ it('should send ClickedCreatePodEvent to machine', async () => {
+
+ machine.send = jest.fn();
+ component['onClickedCreatePod']();
+ expect(machine.send).toHaveBeenCalledWith(new ClickedCreatePodEvent());
+
+ });
+
+ });
+
+ describe('onClickedCancel', () => {
+
+ it('should send ClickedLogoutEvent to machine', async () => {
+
+ machine.send = jest.fn();
+ component['onClickedCancel']();
+ expect(machine.send).toHaveBeenCalledWith(new ClickedLogoutEvent());
+
+ });
+
+ });
+
+ it('should not render anything when between states', async () => {
+
+ // dont wait for getStorages to complete
window.document.body.appendChild(component);
await component.updateComplete;
- const button = window.document.body.getElementsByTagName('nde-authenticate-setup')[0].shadowRoot
- .querySelector('div.form-container').children[1] as HTMLButtonElement;
-
- machine.send = jest.fn();
+ [ ... component.shadowRoot.children ].forEach((child) => {
- button.click();
+ // component should only have style elements, no other elements
+ expect(child).toBeInstanceOf(HTMLStyleElement);
- expect(machine.send).toHaveBeenCalledWith(new ClickedInstitutionTypeEvent());
+ });
});
diff --git a/packages/solid-crs-manage/lib/features/authenticate/authenticate-setup.component.ts b/packages/solid-crs-manage/lib/features/authenticate/authenticate-setup.component.ts
index 1b6fd7bd..d7573f7b 100644
--- a/packages/solid-crs-manage/lib/features/authenticate/authenticate-setup.component.ts
+++ b/packages/solid-crs-manage/lib/features/authenticate/authenticate-setup.component.ts
@@ -1,12 +1,13 @@
-import { html, property, unsafeCSS, css, TemplateResult, CSSResult } from 'lit-element';
+import { html, property, unsafeCSS, css, TemplateResult, CSSResult, internalProperty } from 'lit-element';
import { unsafeHTML } from 'lit-html/directives/unsafe-html.js';
import { Logger, Translator } from '@netwerk-digitaal-erfgoed/solid-crs-core';
-import { Interpreter } from 'xstate';
+import { Interpreter, State } from 'xstate';
import { RxLitElement } from 'rx-lit';
import { unsafeSVG } from 'lit-html/directives/unsafe-svg';
import { Theme, Identity } from '@netwerk-digitaal-erfgoed/solid-crs-theme';
-import { ClickedAdministratorTypeEvent, ClickedInstitutionTypeEvent } from '../../app.events';
-import { AppContext } from '../../app.machine';
+import { from } from 'rxjs';
+import { ClickedAdministratorTypeEvent, ClickedCreatePodEvent, ClickedInstitutionTypeEvent, ClickedLogoutEvent } from '../../app.events';
+import { AppContext, AppDataStates, AppRootStates } from '../../app.machine';
/**
* The first time setup page of the authenticate process.
@@ -33,6 +34,30 @@ export class AuthenticateSetupComponent extends RxLitElement {
@property({ type: Object })
public actor: Interpreter
;
+ /**
+ * The state of this component.
+ */
+ @internalProperty()
+ state?: State;
+
+ protected firstUpdated(): void {
+
+ this.subscribe('state', from(this.actor));
+
+ }
+
+ private onClickedCreatePod = () => {
+
+ this.actor.send(new ClickedCreatePodEvent());
+
+ };
+
+ private onClickedCancel = () => {
+
+ this.actor.send(new ClickedLogoutEvent());
+
+ };
+
/**
* Renders the component as HTML.
*
@@ -40,7 +65,9 @@ export class AuthenticateSetupComponent extends RxLitElement {
*/
render(): TemplateResult {
- return html`
+ return this.state?.matches({ [AppRootStates.DATA]: AppDataStates.DETERMINING_POD_TYPE })
+ // admin - institution buttons
+ ? html`
${this.translator?.translate('authenticate.pages.setup.title')}
@@ -72,11 +99,24 @@ export class AuthenticateSetupComponent extends RxLitElement {
+ `
+ // create pod buttons
+ : this.state?.matches({ [AppRootStates.DATA]: AppDataStates.AWAITING_POD_CREATION }) ? html`
+
+
-
${unsafeHTML(this.translator?.translate('authenticate.pages.login.create-webid'))}
+
- `;
+
+
+
+
+
+ ` : html``;
}
@@ -94,11 +134,12 @@ export class AuthenticateSetupComponent extends RxLitElement {
justify-content: center;
align-items: center;
background-color: var(--colors-primary-dark);
+ color: var(--colors-foreground-inverse);
+ gap: var(--gap-huge);
}
:host > * {
- margin-bottom: var(--gap-large);
- width: 50%;
+ width: 500px;
}
.title-container {
@@ -107,7 +148,6 @@ export class AuthenticateSetupComponent extends RxLitElement {
flex-direction: row;
justify-content: center;
align-items: center;
- color: var(--colors-foreground-inverse);
}
.title-container svg {
@@ -129,10 +169,14 @@ export class AuthenticateSetupComponent extends RxLitElement {
flex-direction: column;
justify-content: center;
align-items: stretch;
+ gap: var(--gap-normal);
}
- .form-container > * {
- margin-bottom: var(--gap-large);
+ .button-container {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ gap: var(--gap-normal);
}
nde-large-card {
@@ -142,6 +186,12 @@ export class AuthenticateSetupComponent extends RxLitElement {
svg {
stroke: var(--colors-foreground-light) !important;
}
+
+ p {
+ text-align: center;
+ font-size: var(--font-size-small);
+ margin: 0;
+ }
`,
];
diff --git a/packages/solid-crs-manage/lib/features/collection/collection-root.component.ts b/packages/solid-crs-manage/lib/features/collection/collection-root.component.ts
index b0a62bf9..4f6ed53c 100644
--- a/packages/solid-crs-manage/lib/features/collection/collection-root.component.ts
+++ b/packages/solid-crs-manage/lib/features/collection/collection-root.component.ts
@@ -5,7 +5,7 @@ import { map } from 'rxjs/operators';
import { from } from 'rxjs';
import { ActorRef, Interpreter, State } from 'xstate';
import { RxLitElement } from 'rx-lit';
-import { Collection as CollectionIcon, Connect, Cross, Empty, Object as ObjectIcon, Open, Plus, Save, Theme, Trash } from '@netwerk-digitaal-erfgoed/solid-crs-theme';
+import { Collection as CollectionIcon, Cross, Empty, Object as ObjectIcon, Open, Plus, Save, Theme, Trash } from '@netwerk-digitaal-erfgoed/solid-crs-theme';
import { unsafeSVG } from 'lit-html/directives/unsafe-svg';
import { DismissAlertEvent } from '../../app.events';
import { ObjectEvents } from '../object/object.events';
diff --git a/packages/solid-crs-manage/lib/public/nl-NL.json b/packages/solid-crs-manage/lib/public/nl-NL.json
index 1bbac642..e4e59cfc 100644
--- a/packages/solid-crs-manage/lib/public/nl-NL.json
+++ b/packages/solid-crs-manage/lib/public/nl-NL.json
@@ -224,7 +224,15 @@
"separator": "of",
"create-webid": "Nog geen WebID? Klik
hier."
},
-
+ "no-pod": {
+ "title": "Je hebt nog geen pod.",
+ "subtitle": {
+ "no-storage": "We konden geen pod vinden voor je WebID.",
+ "add-storage": "Voeg
handmatig een pod toe of maak een pod aan bij NDE."
+ },
+ "button-create-pod": "Maak een pod aan bij NDE",
+ "button-cancel": "Annuleren"
+ },
"setup": {
"title": "Hoe wil je deze pod gebruiken?",
"button-administrator": {
diff --git a/packages/solid-crs-manage/package-lock.json b/packages/solid-crs-manage/package-lock.json
index 88e112b3..e5e48767 100644
--- a/packages/solid-crs-manage/package-lock.json
+++ b/packages/solid-crs-manage/package-lock.json
@@ -660,13 +660,13 @@
"dev": true
},
"@digita-ai/dgt-components": {
- "version": "0.10.0",
- "resolved": "https://npm.pkg.github.com/download/@digita-ai/dgt-components/0.10.0/8e01693a6350086325cc4a161a37655c29929b3b68a727ac04c0cbbb11fe4a9e",
- "integrity": "sha512-zgpJqZBPb9AqZbByQDd2t8BC/GesMnHUhYu1Q6Jm2Y8X+RfQecu1EgKDFdp240+dGQU2cbor6ei37f5jMt63bQ==",
+ "version": "0.11.1",
+ "resolved": "https://npm.pkg.github.com/download/@digita-ai/dgt-components/0.11.1/0ce32e9b8451f12675da7d4ce703a29bc432ceda9b027a2b883b912c50037227",
+ "integrity": "sha512-vsKXyl/C8DtzQAAmDsCfWUsTfsWYcdOJkqR6pFHcNQ7Ppstp9PzYEIno1UrGWCCigzA14Z1O7tGglWbFyBzWSg==",
"requires": {
"@appnest/lit-translate": "^1.1.18",
- "@digita-ai/dgt-theme": "0.10.0",
- "@digita-ai/dgt-utils": "0.10.0",
+ "@digita-ai/dgt-theme": "0.11.1",
+ "@digita-ai/dgt-utils": "0.11.1",
"@digita-ai/inrupt-solid-service": "^0.9.2",
"@digita-ai/semcom-core": "^0.9.5",
"@digita-ai/semcom-sdk": "^0.9.5",
@@ -726,16 +726,16 @@
}
},
"@digita-ai/semcom-core": {
- "version": "0.9.7",
- "resolved": "https://npm.pkg.github.com/download/@digita-ai/semcom-core/0.9.7/5a8cfc4b98490a80d34263503a5b10db30dc03994e86cd17e2614b9d08e41788",
- "integrity": "sha512-+CJOd68u7qohy5xu3xUImJR5KS4QVroubT/eNXcDXMrChkK73dfh3wzF99+vWhav0ez05WrKPPaVwbyfszXXEg=="
+ "version": "0.9.8",
+ "resolved": "https://npm.pkg.github.com/download/@digita-ai/semcom-core/0.9.8/4890dc24ceba8fb377c07dce43fe7b5bd13288b65e0813315071bc54d027fc6b",
+ "integrity": "sha512-mKIDGhxWjNxV9XGf3sLArWeqAiNvkQlmDKSzeJ3rTWM2xD0iJpEIH9SjF8evZ0deIA/RPTsEijFEE9KYDc/Vvw=="
},
"@digita-ai/semcom-sdk": {
- "version": "0.9.7",
- "resolved": "https://npm.pkg.github.com/download/@digita-ai/semcom-sdk/0.9.7/1bde4fcff3e21d84bf34c1f639e33c9732ffbd49efdfb902c511a53d19306fa9",
- "integrity": "sha512-gZ9HPcMK+xa4ojR29/NpSK1uREPMK3z1APPx+5lQ5hQMqlEzvKq1JLV9rFsvfJl/8l0jvhWoNKRohOP8S9jBiw==",
+ "version": "0.9.8",
+ "resolved": "https://npm.pkg.github.com/download/@digita-ai/semcom-sdk/0.9.8/5b8c07f72343a626b4e359befdfbc340c62a7a96e48f89d76703da3d790fd74b",
+ "integrity": "sha512-GWYv33tKckBcWAkCyE+e2HaF+She0wrdvUWAMF3aDdn2ML6apftgBfYgIXIbPq+F/sM4Pt7xD62qxtYe3EamHg==",
"requires": {
- "@digita-ai/semcom-core": "0.9.7",
+ "@digita-ai/semcom-core": "0.9.8",
"buffer": "6.0.3",
"jssha": "^3.2.0",
"n3": "1.10.0"
@@ -814,26 +814,26 @@
}
},
"@jest/environment": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz",
- "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz",
+ "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==",
"requires": {
- "@jest/fake-timers": "^27.4.2",
+ "@jest/fake-timers": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
- "jest-mock": "^27.4.2"
+ "jest-mock": "^27.4.6"
}
},
"@jest/fake-timers": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz",
- "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz",
+ "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==",
"requires": {
"@jest/types": "^27.4.2",
"@sinonjs/fake-timers": "^8.0.1",
"@types/node": "*",
- "jest-message-util": "^27.4.2",
- "jest-mock": "^27.4.2",
+ "jest-message-util": "^27.4.6",
+ "jest-mock": "^27.4.6",
"jest-util": "^27.4.2"
}
},
@@ -937,23 +937,23 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"jest-environment-jsdom": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz",
- "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz",
+ "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==",
"requires": {
- "@jest/environment": "^27.4.4",
- "@jest/fake-timers": "^27.4.2",
+ "@jest/environment": "^27.4.6",
+ "@jest/fake-timers": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
- "jest-mock": "^27.4.2",
+ "jest-mock": "^27.4.6",
"jest-util": "^27.4.2",
"jsdom": "^16.6.0"
}
},
"jest-message-util": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz",
- "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz",
+ "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==",
"requires": {
"@babel/code-frame": "^7.12.13",
"@jest/types": "^27.4.2",
@@ -961,15 +961,15 @@
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.4.2",
+ "pretty-format": "^27.4.6",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
}
},
"jest-mock": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz",
- "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz",
+ "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==",
"requires": {
"@jest/types": "^27.4.2",
"@types/node": "*"
@@ -1007,11 +1007,10 @@
}
},
"pretty-format": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz",
- "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz",
+ "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==",
"requires": {
- "@jest/types": "^27.4.2",
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
"react-is": "^17.0.1"
@@ -1043,17 +1042,18 @@
}
},
"@digita-ai/dgt-theme": {
- "version": "0.10.0",
- "resolved": "https://npm.pkg.github.com/download/@digita-ai/dgt-theme/0.10.0/f8f1d1afcc92c143c1db10a64b6e22f51c99e37133a80465612d39875c6338bd",
- "integrity": "sha512-lkFBvr+9nhneIct1TboxWEbHq+zwT3hFo8K7L5skG9yBuX9fMucXneIoo5aGX0F8JJK//0SYphVRaL/8m7JkFA=="
+ "version": "0.11.1",
+ "resolved": "https://npm.pkg.github.com/download/@digita-ai/dgt-theme/0.11.1/0719862c4794e66e318ed987c6079b7cf86bbf8b74b898f8b63fa797a07c3c5b",
+ "integrity": "sha512-5hCFOXTWfYfECQTWMVu7SyHcIbi8Bpg5UXxIosfgvvp0+qyILFDBAAIYz637mpKTj+hBrlQjNV0a5XTr5+jZCQ=="
},
"@digita-ai/dgt-utils": {
- "version": "0.10.0",
- "resolved": "https://npm.pkg.github.com/download/@digita-ai/dgt-utils/0.10.0/5686b5d650eb81ac14763ec34fa6223e08a602fee92a1f673518da4337176349",
- "integrity": "sha512-FcWCnYUhWsCmTMpFzCs8dF7zyA0OQuxoIhCtCkRqiFMIjRTIPMjUzo7IBCCKfwpv1XXMuPTudzPZglTGmk1cZA==",
+ "version": "0.11.1",
+ "resolved": "https://npm.pkg.github.com/download/@digita-ai/dgt-utils/0.11.1/ffde3a6fc2ced867c3b4688d24a4f2e520ecc887baf349a6014b496cd5105ff1",
+ "integrity": "sha512-5Opm6E46WrGsL4ueGiS0kiSJD0k4v5pkYpNitFcQ15HC5okRKG6pel0dob7otAokTvtiJcBYbE9xwVTNzbwt2g==",
"requires": {
"@types/node": "^14.14.14",
"rxjs": "^7.4.0",
+ "xstate": "^4.26.1",
"zone.js": "~0.8.26"
}
},
@@ -1787,7 +1787,11 @@
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "color-convert": "^2.0.1"
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^16.0.0",
+ "chalk": "^4.0.0"
}
},
"chalk": {
diff --git a/packages/solid-crs-manage/package.json b/packages/solid-crs-manage/package.json
index 2235defa..85a170a1 100644
--- a/packages/solid-crs-manage/package.json
+++ b/packages/solid-crs-manage/package.json
@@ -29,7 +29,7 @@
"posttest": "jest-coverage-thresholds-bumper --silent --coverage-summary-path coverage-summary.json"
},
"dependencies": {
- "@digita-ai/dgt-components": "0.10.0",
+ "@digita-ai/dgt-components": " 0.11.1",
"@digita-ai/inrupt-solid-service": "^0.11.0",
"@digita-ai/semcom-core": "0.4.1",
"@digita-ai/semcom-sdk": "0.4.1",
@@ -91,10 +91,10 @@
],
"coverageThreshold": {
"global": {
- "statements": 84.98,
- "branches": 85.21,
- "lines": 86.1,
- "functions": 71.25
+ "statements": 85.67,
+ "branches": 85.14,
+ "lines": 86.9,
+ "functions": 71.75
}
},
"automock": false,
@@ -116,4 +116,4 @@
},
"maxWorkers": 4
}
-}
+}
\ No newline at end of file
diff --git a/packages/solid-crs-pods/Dockerfile b/packages/solid-crs-pods/Dockerfile
index 85fab3dd..195d075e 100644
--- a/packages/solid-crs-pods/Dockerfile
+++ b/packages/solid-crs-pods/Dockerfile
@@ -16,8 +16,9 @@ WORKDIR /community-server
# Install app dependencies
ARG NPM_TOKEN
-COPY package.json /community-server/
+COPY . /community-server/
RUN npm install --unsafe-perm
+RUN npm run build
# Bundle app source
COPY . /community-server
@@ -28,4 +29,4 @@ COPY data/hetlageland/ /tmp/css/hetlageland/
# Expose ports.
EXPOSE 80
-CMD node ./node_modules/.bin/community-solid-server -b ${BASE_URL} -p ${PORT} -c ${CONFIG} --rootFilePath /tmp/css
+CMD node ./node_modules/.bin/community-solid-server -m . -b ${BASE_URL} -p ${PORT} -c ${CONFIG} --rootFilePath /tmp/css
diff --git a/packages/solid-crs-theme/lib/elements/buttons.css b/packages/solid-crs-theme/lib/elements/buttons.css
index efb02fa9..0e5111e6 100644
--- a/packages/solid-crs-theme/lib/elements/buttons.css
+++ b/packages/solid-crs-theme/lib/elements/buttons.css
@@ -1,7 +1,6 @@
button {
border: none;
background-color: var(--colors-primary-dark);
- text-transform: uppercase;
padding: var(--gap-small);
color: var(--colors-foreground-inverse);
cursor: pointer;