@progressive-development/pd-spa-helper 0.1.159 → 0.1.161

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.
@@ -71,8 +71,8 @@ export declare abstract class PdSpaHelper extends PdSpaHelper_base {
71
71
  activateLoginHandler(): void;
72
72
  render(): TemplateResult<1>;
73
73
  private _getMainClass;
74
- _renderMenu(pageConfig: NavigationPage, hideTeaser: boolean): "" | TemplateResult<1>;
75
- _renderTopMenu(pageConfig: NavigationPage, hideTeaser: boolean): "" | TemplateResult<1>;
74
+ _renderMenu(pageConfig: NavigationPage, hideTeaser: boolean): TemplateResult<1> | "";
75
+ _renderTopMenu(pageConfig: NavigationPage, hideTeaser: boolean): TemplateResult<1> | "";
76
76
  _renderTeaser(): TemplateResult | string;
77
77
  _renderFooter(): TemplateResult<1>;
78
78
  /**
@@ -10,7 +10,7 @@ export { DefaultWizardStep } from './defaultpage/default-wizard-step.js';
10
10
  export { DefaultStepAddress } from './defaultpage/default-step-address.js';
11
11
  export { DefaultStepSummary, OrderStep } from './defaultpage/default-step-summary.js';
12
12
  export { getDB, } from './service-provider/firebase/firestore-client.js';
13
- export { loginImpl, logoutImpl, isAuthenticatedImpl, callFunctionImpl } from './service-provider/service-provider-impl.js';
13
+ export { loginImpl, logoutImpl, isAuthenticatedImpl, callFunctionImpl, uploadFile } from './service-provider/service-provider-impl.js';
14
14
  export { pdStore } from './store/mini-rx.store.js';
15
15
  export { templates as beTemplaes } from './generated/locale-wrapper/be-wrapper.js';
16
16
  export { templates as deTemplaes } from './generated/locale-wrapper/de-wrapper.js';
package/dist/src/index.js CHANGED
@@ -10,7 +10,7 @@ export { DefaultWizardStep } from './defaultpage/default-wizard-step.js';
10
10
  export { DefaultStepAddress } from './defaultpage/default-step-address.js';
11
11
  export { DefaultStepSummary } from './defaultpage/default-step-summary.js';
12
12
  export { getDB, } from './service-provider/firebase/firestore-client.js';
13
- export { loginImpl, logoutImpl, isAuthenticatedImpl, callFunctionImpl } from './service-provider/service-provider-impl.js';
13
+ export { loginImpl, logoutImpl, isAuthenticatedImpl, callFunctionImpl, uploadFile } from './service-provider/service-provider-impl.js';
14
14
  export { pdStore } from './store/mini-rx.store.js';
15
15
  export { templates as beTemplaes } from './generated/locale-wrapper/be-wrapper.js';
16
16
  export { templates as deTemplaes } from './generated/locale-wrapper/de-wrapper.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,UAAU,MAAM,8CAA8C,CAAA;AAE1E,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AAEnE,OAAO,EAAC,mBAAmB,EAAa,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,wCAAwC,CAAC;AAE1H,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAC,aAAa,EAAC,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,kBAAkB,EAAY,MAAM,uCAAuC,CAAC;AAEpF,OAAO,EACL,KAAK,GACN,MAAM,iDAAiD,CAAA;AAExD,OAAO,EACL,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AAEjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAW,EAAE,GAAU,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;IAChG,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAC;QAClD,MAAM,EAAE;YACN,GAAG;YACH,SAAS;YACT,OAAO;SACR;QACD,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC,CAAC;AACN,CAAC,CAAA","sourcesContent":["export { \n PdSpaHelper, \n startInit, \n} from './PdSpaHelper.js';\n\nexport * as pdSpaModel from './service-provider/service-provider-model.js'\n\nexport {isBlank, isEmpty} from './helper/helper-utils.js';\n\nexport {DefaultViewPage} from './defaultpage/default-view-page.js';\n\nexport {DefaultConfirmPopup, PopupType, ABORT_EVENT_NAME, STORE_EVENT_NAME} from './defaultpage/default-confirm-popup.js';\n\nexport {DefaultDialogPopup} from './defaultpage/default-dialog-popup.js';\n\nexport {DefaultPopup} from './defaultpage/default-popup.js';\n\nexport {DefaultWizard} from './defaultpage/default-wizard.js';\n\nexport {DefaultWizardStep} from './defaultpage/default-wizard-step.js';\n\nexport {DefaultStepAddress} from './defaultpage/default-step-address.js';\n\nexport {DefaultStepSummary, OrderStep} from './defaultpage/default-step-summary.js';\n\nexport {\n getDB,\n} from './service-provider/firebase/firestore-client.js'\n\nexport {\n loginImpl,\n logoutImpl,\n isAuthenticatedImpl,\n callFunctionImpl\n} from './service-provider/service-provider-impl.js'\n\nexport { pdStore } from './store/mini-rx.store.js';\n\nexport { templates as beTemplaes} from './generated/locale-wrapper/be-wrapper.js'\nexport { templates as deTemplaes} from './generated/locale-wrapper/de-wrapper.js'\nexport { templates as enTemplaes} from './generated/locale-wrapper/en-wrapper.js'\n\nexport const dispatchToastEvent = (element:any, txt:string, isSuccess:boolean, isError:boolean) => {\n element.dispatchEvent(new CustomEvent(\"toast-event\",{\n detail: {\n txt,\n isSuccess,\n isError\n },\n bubbles: true,\n composed: true\n }));\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,UAAU,MAAM,8CAA8C,CAAA;AAE1E,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AAEnE,OAAO,EAAC,mBAAmB,EAAa,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,wCAAwC,CAAC;AAE1H,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAC,aAAa,EAAC,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,kBAAkB,EAAY,MAAM,uCAAuC,CAAC;AAEpF,OAAO,EACL,KAAK,GACN,MAAM,iDAAiD,CAAA;AAExD,OAAO,EACL,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACX,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AAEjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAW,EAAE,GAAU,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;IAChG,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAC;QAClD,MAAM,EAAE;YACN,GAAG;YACH,SAAS;YACT,OAAO;SACR;QACD,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC,CAAC;AACN,CAAC,CAAA","sourcesContent":["export { \n PdSpaHelper, \n startInit, \n} from './PdSpaHelper.js';\n\nexport * as pdSpaModel from './service-provider/service-provider-model.js'\n\nexport {isBlank, isEmpty} from './helper/helper-utils.js';\n\nexport {DefaultViewPage} from './defaultpage/default-view-page.js';\n\nexport {DefaultConfirmPopup, PopupType, ABORT_EVENT_NAME, STORE_EVENT_NAME} from './defaultpage/default-confirm-popup.js';\n\nexport {DefaultDialogPopup} from './defaultpage/default-dialog-popup.js';\n\nexport {DefaultPopup} from './defaultpage/default-popup.js';\n\nexport {DefaultWizard} from './defaultpage/default-wizard.js';\n\nexport {DefaultWizardStep} from './defaultpage/default-wizard-step.js';\n\nexport {DefaultStepAddress} from './defaultpage/default-step-address.js';\n\nexport {DefaultStepSummary, OrderStep} from './defaultpage/default-step-summary.js';\n\nexport {\n getDB,\n} from './service-provider/firebase/firestore-client.js'\n\nexport {\n loginImpl,\n logoutImpl,\n isAuthenticatedImpl,\n callFunctionImpl,\n uploadFile\n} from './service-provider/service-provider-impl.js'\n\nexport { pdStore } from './store/mini-rx.store.js';\n\nexport { templates as beTemplaes} from './generated/locale-wrapper/be-wrapper.js'\nexport { templates as deTemplaes} from './generated/locale-wrapper/de-wrapper.js'\nexport { templates as enTemplaes} from './generated/locale-wrapper/en-wrapper.js'\n\nexport const dispatchToastEvent = (element:any, txt:string, isSuccess:boolean, isError:boolean) => {\n element.dispatchEvent(new CustomEvent(\"toast-event\",{\n detail: {\n txt,\n isSuccess,\n isError\n },\n bubbles: true,\n composed: true\n }));\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { FirebaseApp } from 'firebase/app';
2
+ import { UploadResult } from "firebase/storage";
3
+ import { FileStorageConfig, UploadFile } from '../service-provider-model.js';
4
+ /**
5
+ * During start/load application, initialize functions.
6
+ *
7
+ * @param {*} app - initialized app.
8
+ */
9
+ export declare const initFirestorage: (app: FirebaseApp, defaultStorage?: string, storageConfig?: FileStorageConfig) => void;
10
+ export declare const uploadFirestorageFile: (file: UploadFile) => Promise<UploadResult>;
@@ -0,0 +1,62 @@
1
+ import { getStorage, ref, uploadString } from "firebase/storage";
2
+ const DEFAULT_STORAGE = "default_storage";
3
+ const storageMap = new Map();
4
+ /**
5
+ * During start/load application, initialize functions.
6
+ *
7
+ * @param {*} app - initialized app.
8
+ */
9
+ export const initFirestorage = (app, defaultStorage, storageConfig) => {
10
+ try {
11
+ // add default storage
12
+ if (defaultStorage) {
13
+ storageMap.set(DEFAULT_STORAGE, {
14
+ storage: getStorage(app)
15
+ });
16
+ }
17
+ // add specific storages
18
+ storageConfig === null || storageConfig === void 0 ? void 0 : storageConfig.storage.forEach(storeConfig => {
19
+ const storage = getStorage(app, storeConfig.name);
20
+ const storageRootRef = ref(storage);
21
+ storageMap.set(storeConfig.name, {
22
+ storage,
23
+ references: [
24
+ {
25
+ key: "ROOT",
26
+ storageRef: storageRootRef
27
+ },
28
+ ...storeConfig.references.map(refConfigString => ({
29
+ key: refConfigString,
30
+ storageRef: ref(storageRootRef, refConfigString)
31
+ }))
32
+ ]
33
+ });
34
+ });
35
+ }
36
+ catch (error) {
37
+ console.error(error);
38
+ }
39
+ };
40
+ export const uploadFirestorageFile = (file) => {
41
+ if (!storageMap || storageMap.size === 0) {
42
+ throw new Error("No storage is configured");
43
+ }
44
+ // get storage
45
+ const { storageName, referenceKey, subFolderName, fileName } = file;
46
+ const storageConf = storageMap.get(storageName || DEFAULT_STORAGE);
47
+ if (!storageConf) {
48
+ throw new Error(`Invalid storage name: ${storageName || DEFAULT_STORAGE}`);
49
+ }
50
+ if (!storageConf.references || storageConf.references.length === 0) {
51
+ throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);
52
+ }
53
+ // get reference to path
54
+ const uploadRefConf = referenceKey ? (storageConf.references.filter(filterRef => filterRef.key === referenceKey)[0]) : storageConf.references[0];
55
+ if (!uploadRefConf || !uploadRefConf.storageRef) {
56
+ throw new Error(`No valid reference for key: ${referenceKey}`);
57
+ }
58
+ // create file reference and upload
59
+ const fileRef = ref(uploadRefConf.storageRef, subFolderName ? `${subFolderName}/${fileName}` : fileName);
60
+ return uploadString(fileRef, file.base64DataURL, 'data_url');
61
+ };
62
+ //# sourceMappingURL=firestorage-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firestorage-client.js","sourceRoot":"","sources":["../../../../src/service-provider/firebase/firestorage-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { FirebaseApp } from 'firebase/app';\nimport { FirebaseStorage, StorageReference, UploadResult, getStorage, ref, uploadString } from \"firebase/storage\";\n\nimport { FileStorageConfig, UploadFile } from '../service-provider-model.js';\n\nconst DEFAULT_STORAGE = \"default_storage\";\n\nconst storageMap:Map<string, { \n storage: FirebaseStorage,\n references?: {\n key: string,\n storageRef: StorageReference\n }[],\n}> = new Map();\n\n/**\n * During start/load application, initialize functions.\n *\n * @param {*} app - initialized app.\n */\nexport const initFirestorage = (app: FirebaseApp, defaultStorage?: string, storageConfig?: FileStorageConfig) => {\n try {\n\n // add default storage\n if (defaultStorage) {\n storageMap.set(DEFAULT_STORAGE, {\n storage: getStorage(app)\n });\n } \n \n // add specific storages\n storageConfig?.storage.forEach(storeConfig => {\n\n const storage = getStorage(app, storeConfig.name);\n const storageRootRef = ref(storage);\n\n storageMap.set(storeConfig.name, {\n storage,\n references: [\n {\n key: \"ROOT\",\n storageRef: storageRootRef\n },\n ...storeConfig.references.map(refConfigString => ({\n key: refConfigString,\n storageRef: ref(storageRootRef, refConfigString)\n }))\n ]\n });\n }); \n\n } catch (error) {\n console.error(error);\n }\n};\n\nexport const uploadFirestorageFile = (file: UploadFile):Promise<UploadResult> => { \n\n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n } \n\n // get storage\n const {storageName, referenceKey, subFolderName, fileName} = file;\n const storageConf = storageMap.get(storageName || DEFAULT_STORAGE);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${storageName || DEFAULT_STORAGE}`);\n } \n if (!storageConf.references || storageConf.references.length === 0) {\n throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);\n }\n\n // get reference to path\n const uploadRefConf = referenceKey ? (storageConf.references.filter(filterRef => filterRef.key === referenceKey)[0]) : storageConf.references[0];\n if (!uploadRefConf || !uploadRefConf.storageRef) {\n throw new Error(`No valid reference for key: ${referenceKey}`);\n }\n\n // create file reference and upload\n const fileRef = ref(uploadRefConf.storageRef, subFolderName ? `${subFolderName}/${fileName}` : fileName);\n return uploadString(fileRef, file.base64DataURL, 'data_url');\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import { FileStorageConfig, UploadFile } from '../service-provider-model.js';
2
+ /**
3
+ * During start/load application, initialize functions.
4
+ *
5
+ * @param {*} app - initialized app.
6
+ */
7
+ export declare const initStorageMock: (defaultStorage?: string, storageConfig?: FileStorageConfig) => void;
8
+ export declare const uploadStorageFileMock: (file: UploadFile) => Promise<any>;
@@ -0,0 +1,90 @@
1
+ const DEFAULT_STORAGE = "default_storage";
2
+ // Download file in mock implementation
3
+ const downloadFile = (buffer) => {
4
+ const data = new Blob([buffer], {
5
+ type: 'image/png'
6
+ });
7
+ const url = window.URL.createObjectURL(data);
8
+ window.open(url);
9
+ };
10
+ const base64ToArrayBuffer = (base64) => {
11
+ const binaryString = atob(base64);
12
+ const bytes = new Uint8Array(binaryString.length);
13
+ for (let i = 0; i < binaryString.length; i += 1) {
14
+ bytes[i] = binaryString.charCodeAt(i);
15
+ }
16
+ return bytes.buffer;
17
+ };
18
+ class MockStorage {
19
+ constructor(storageName) {
20
+ this._name = storageName;
21
+ }
22
+ // eslint-disable-next-line class-methods-use-this
23
+ uploadFile(filePath, file) {
24
+ downloadFile(base64ToArrayBuffer(file.base64DataURL));
25
+ return Promise.resolve({
26
+ fullPath: filePath
27
+ });
28
+ }
29
+ }
30
+ const storageMap = new Map();
31
+ /**
32
+ * During start/load application, initialize functions.
33
+ *
34
+ * @param {*} app - initialized app.
35
+ */
36
+ export const initStorageMock = (defaultStorage, storageConfig) => {
37
+ console.log("Init mock Storage");
38
+ try {
39
+ // add default storage
40
+ if (defaultStorage) {
41
+ storageMap.set(DEFAULT_STORAGE, {
42
+ storage: new MockStorage(DEFAULT_STORAGE)
43
+ });
44
+ }
45
+ // add specific storages
46
+ storageConfig === null || storageConfig === void 0 ? void 0 : storageConfig.storage.forEach(storeConfig => {
47
+ const storage = new MockStorage(storeConfig.name);
48
+ const storageRootRef = "/";
49
+ storageMap.set(storeConfig.name, {
50
+ storage,
51
+ references: [
52
+ {
53
+ key: "ROOT",
54
+ storageRef: storageRootRef
55
+ },
56
+ ...storeConfig.references.map(refConfigString => ({
57
+ key: refConfigString,
58
+ storageRef: `${storageRootRef}/${refConfigString}`
59
+ }))
60
+ ]
61
+ });
62
+ });
63
+ }
64
+ catch (error) {
65
+ console.error(error);
66
+ }
67
+ };
68
+ export const uploadStorageFileMock = (file) => {
69
+ if (!storageMap || storageMap.size === 0) {
70
+ throw new Error("No storage is configured");
71
+ }
72
+ // get storage
73
+ const { storageName, referenceKey, subFolderName, fileName } = file;
74
+ const storageConf = storageMap.get(storageName || DEFAULT_STORAGE);
75
+ if (!storageConf) {
76
+ throw new Error(`Invalid storage name: ${storageName || DEFAULT_STORAGE}`);
77
+ }
78
+ if (!storageConf.references || storageConf.references.length === 0) {
79
+ throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);
80
+ }
81
+ // get reference to path
82
+ const uploadRefConf = referenceKey ? (storageConf.references.filter(filterRef => filterRef.key === referenceKey)[0]) : storageConf.references[0];
83
+ if (!uploadRefConf || !uploadRefConf.storageRef) {
84
+ throw new Error(`No valid reference for key: ${referenceKey}`);
85
+ }
86
+ // create file reference and upload
87
+ const fileRef = `${uploadRefConf.storageRef}/${subFolderName ? `${subFolderName}/${fileName}` : fileName}`;
88
+ return storageConf.storage.uploadFile(fileRef, file);
89
+ };
90
+ //# sourceMappingURL=storage-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-client.js","sourceRoot":"","sources":["../../../../src/service-provider/mock/storage-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { FileStorageConfig, UploadFile } from '../service-provider-model.js';\n\n\nconst DEFAULT_STORAGE = \"default_storage\";\n\n\n// Download file in mock implementation\nconst downloadFile = (buffer: ArrayBuffer) => {\n const data: Blob = new Blob([buffer], {\n type: 'image/png'\n });\n const url= window.URL.createObjectURL(data);\n window.open(url);\n}\n\nconst base64ToArrayBuffer = (base64:string) => {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i+=1) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\n\nclass MockStorage {\n\n private _name: string;\n\n constructor(storageName: string) {\n this._name = storageName;\n }\n\n // eslint-disable-next-line class-methods-use-this\n uploadFile(filePath: string, file: UploadFile): Promise<any> {\n downloadFile(\n base64ToArrayBuffer(file.base64DataURL)\n );\n return Promise.resolve({\n fullPath: filePath\n });\n }\n\n}\n\nconst storageMap:Map<string, { \n storage: MockStorage,\n references?: {\n key: string,\n storageRef: string\n }[],\n}> = new Map();\n\n/**\n * During start/load application, initialize functions.\n *\n * @param {*} app - initialized app.\n */\nexport const initStorageMock = (defaultStorage?: string, storageConfig?: FileStorageConfig) => {\n console.log(\"Init mock Storage\");\n try {\n\n // add default storage\n if (defaultStorage) {\n storageMap.set(DEFAULT_STORAGE, {\n storage: new MockStorage(DEFAULT_STORAGE)\n });\n } \n \n // add specific storages\n storageConfig?.storage.forEach(storeConfig => {\n\n const storage = new MockStorage(storeConfig.name);\n const storageRootRef = \"/\";\n\n storageMap.set(storeConfig.name, {\n storage,\n references: [\n {\n key: \"ROOT\",\n storageRef: storageRootRef\n },\n ...storeConfig.references.map(refConfigString => ({\n key: refConfigString,\n storageRef: `${storageRootRef}/${refConfigString}`\n }))\n ]\n });\n }); \n\n } catch (error) {\n console.error(error);\n }\n};\n\n\nexport const uploadStorageFileMock = (file: UploadFile):Promise<any> => { \n\n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n } \n\n // get storage\n const {storageName, referenceKey, subFolderName, fileName} = file;\n const storageConf = storageMap.get(storageName || DEFAULT_STORAGE);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${storageName || DEFAULT_STORAGE}`);\n } \n if (!storageConf.references || storageConf.references.length === 0) {\n throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);\n }\n\n // get reference to path\n const uploadRefConf = referenceKey ? (storageConf.references.filter(filterRef => filterRef.key === referenceKey)[0]) : storageConf.references[0];\n if (!uploadRefConf || !uploadRefConf.storageRef) {\n throw new Error(`No valid reference for key: ${referenceKey}`);\n }\n\n // create file reference and upload\n const fileRef = `${uploadRefConf.storageRef}/${subFolderName ? `${subFolderName}/${fileName}` : fileName}`; \n return storageConf.storage.uploadFile(fileRef, file);\n};\n\n\n"]}
@@ -1,4 +1,4 @@
1
- import { AppConfiguration, FunctionDefinition, FunctionResult, ServiceProviderConfiguration } from "./service-provider-model.js";
1
+ import { AppConfiguration, FunctionDefinition, FunctionResult, ServiceProviderConfiguration, UploadFile } from "./service-provider-model.js";
2
2
  import { ServiceCallController } from "../service-call-controller2.js";
3
3
  export declare const setServiceProvider: (providerParam?: ServiceProviderConfiguration) => void;
4
4
  export declare const initController: (controllerParam: ServiceCallController) => void;
@@ -8,3 +8,4 @@ export declare const authStateChangedImpl: (callback: Function) => void;
8
8
  export declare const isAuthenticatedImpl: () => boolean;
9
9
  export declare const loginImpl: (user: string, sec: string) => Promise<unknown>;
10
10
  export declare const logoutImpl: () => Promise<boolean>;
11
+ export declare const uploadFile: (file: UploadFile) => Promise<unknown>;
@@ -4,6 +4,8 @@ import { authStateChangedMock, isAuthenticatedMock, loginMock, logoutMock } from
4
4
  import { callFunction, initFunctions } from "./firebase/functions-client.js";
5
5
  import { initFirestore } from "./firebase/firestore-client.js";
6
6
  import { callFunctionMock, initMockResponse } from "./mock/function-client.js";
7
+ import { initFirestorage, uploadFirestorageFile } from "./firebase/firestorage-client.js";
8
+ import { initStorageMock, uploadStorageFileMock } from "./mock/storage-client.js";
7
9
  let provider;
8
10
  let controller;
9
11
  const throwUndefinedProviderError = () => {
@@ -18,21 +20,23 @@ export const setServiceProvider = (providerParam) => {
18
20
  export const initController = (controllerParam) => {
19
21
  controller = controllerParam;
20
22
  };
21
- const initFirebaseApplicationServices = (firebaseApp, functionsConfig) => {
23
+ const initFirebaseApplicationServices = (firebaseApp, functionsConfig, firebaseConfig, storageConfig) => {
22
24
  // do something with the app, init db, firestore and functions
23
25
  initFunctions(firebaseApp, functionsConfig);
24
26
  initFirestore(firebaseApp);
27
+ initFirestorage(firebaseApp, firebaseConfig.storageBucket, storageConfig);
25
28
  };
26
29
  export const initAppImpl = (config) => {
27
30
  if (provider === "firebase" && config.firebaseConfig) {
28
31
  const app = initializeApp(config.firebaseConfig);
29
- if (config.functionsConfig) {
32
+ if (config.functionsConfig) { // TODO: invalid if only storage config exists
30
33
  // init application services (functions, store)
31
- initFirebaseApplicationServices(app, config.functionsConfig);
34
+ initFirebaseApplicationServices(app, config.functionsConfig, config.firebaseConfig, config.storageConfig);
32
35
  }
33
36
  }
34
37
  else if (provider === "mock") {
35
38
  initMockResponse(config.mock);
39
+ initStorageMock("default", config.storageConfig);
36
40
  }
37
41
  else {
38
42
  throwUndefinedProviderError();
@@ -108,4 +112,16 @@ export const logoutImpl = () => {
108
112
  }
109
113
  return throwUndefinedProviderError();
110
114
  };
115
+ /* #####################
116
+ * Storage Implementation
117
+ * ##################### */
118
+ export const uploadFile = (file) => {
119
+ if (provider === "firebase") {
120
+ return uploadFirestorageFile(file);
121
+ }
122
+ if (provider === "mock") {
123
+ return uploadStorageFileMock(file);
124
+ }
125
+ return throwUndefinedProviderError();
126
+ };
111
127
  //# sourceMappingURL=service-provider-impl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-provider-impl.js","sourceRoot":"","sources":["../../../src/service-provider/service-provider-impl.ts"],"names":[],"mappings":"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","sourcesContent":["import { FirebaseApp, initializeApp } from \"firebase/app\";\n\nimport { authStateChanged, isAuthenticated, login, logout } from \"./firebase/auth.js\";\nimport { authStateChangedMock, isAuthenticatedMock, loginMock, logoutMock } from \"./mock/auth.js\";\nimport { AppConfiguration, FunctionDefinition, FunctionResult, FunctionsConfig, ServiceProviderConfiguration } from \"./service-provider-model.js\";\nimport { callFunction, initFunctions } from \"./firebase/functions-client.js\";\nimport { initFirestore } from \"./firebase/firestore-client.js\";\nimport { callFunctionMock, initMockResponse } from \"./mock/function-client.js\";\nimport { ServiceCallController } from \"../service-call-controller2.js\";\n\nlet provider: ServiceProviderConfiguration | undefined;\nlet controller: ServiceCallController;\n\nconst throwUndefinedProviderError = () => {\n throw new Error(\"Undefined service provider, please check configuration. 'firebase' or 'mock' allowed here.\");\n}\n\n/* #####################\n * Init Implementation\n * ##################### */\n\nexport const setServiceProvider = (providerParam?: ServiceProviderConfiguration) => {\n provider = providerParam;\n}\n\nexport const initController = (controllerParam: ServiceCallController) => {\n controller = controllerParam\n}\n\nconst initFirebaseApplicationServices = (firebaseApp: FirebaseApp, functionsConfig: FunctionsConfig) => {\n // do something with the app, init db, firestore and functions \n initFunctions(firebaseApp, functionsConfig);\n initFirestore(firebaseApp);\n}\n\nexport const initAppImpl = (config: AppConfiguration) => {\n\n if (provider === \"firebase\" && config.firebaseConfig) {\n const app:FirebaseApp = initializeApp(config.firebaseConfig);\n if (config.functionsConfig) {\n // init application services (functions, store) \n initFirebaseApplicationServices(app, config.functionsConfig);\n }\n } else if (provider === \"mock\") {\n initMockResponse(config.mock);\n } else {\n throwUndefinedProviderError();\n }\n}\n\n/* #####################\n * Functions Implementation\n * ##################### */\nexport const callFunctionImpl = async (def: FunctionDefinition, functionInput: any): Promise<FunctionResult> => {\n \n const callController = (promise: Promise<any>) => {\n if (controller) {\n controller.callDataPromise = {func: def, promise};\n }\n }\n \n if (provider === \"firebase\") {\n const promise = callFunction(def, functionInput)\n callController(promise);\n return promise;\n } \n if (provider === \"mock\") {\n const promise = callFunctionMock(def, functionInput)\n callController(promise);\n return promise;\n }\n\n return throwUndefinedProviderError(); \n}\n\n\n\n/* #####################\n * Auth Implementation\n * ##################### */\n\n\nexport const authStateChangedImpl = (\n callback: Function\n) => {\n if (provider === \"firebase\") {\n authStateChanged(callback);\n } else if (provider === \"mock\") {\n authStateChangedMock();\n } else {\n throwUndefinedProviderError();\n }\n}\n\nexport const isAuthenticatedImpl = () => {\n if (provider === \"firebase\") {\n return isAuthenticated();\n } \n if (provider === \"mock\") {\n return isAuthenticatedMock();\n } \n return throwUndefinedProviderError(); \n}\n\nexport const loginImpl = (user: string, sec: string) => {\n\n if (!user) { \n const returnError = new Error(\"empty user\");\n return Promise.reject(returnError);\n }\n if (!sec) {\n const returnError = new Error(\"empty password\");\n return Promise.reject(returnError);\n }\n\n if (provider === \"firebase\") {\n return login(user, sec);\n } \n if (provider === \"mock\") {\n return loginMock(user, sec);\n } \n return throwUndefinedProviderError(); \n}\n\nexport const logoutImpl = () => {\n if (provider === \"firebase\") {\n return logout();\n } \n if (provider === \"mock\") {\n return logoutMock();\n } \n return throwUndefinedProviderError(); \n}\n"]}
1
+ {"version":3,"file":"service-provider-impl.js","sourceRoot":"","sources":["../../../src/service-provider/service-provider-impl.ts"],"names":[],"mappings":"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","sourcesContent":["import { FirebaseApp, FirebaseOptions, initializeApp } from \"firebase/app\";\n\nimport { authStateChanged, isAuthenticated, login, logout } from \"./firebase/auth.js\";\nimport { authStateChangedMock, isAuthenticatedMock, loginMock, logoutMock } from \"./mock/auth.js\";\nimport { AppConfiguration, FileStorageConfig, FunctionDefinition, FunctionResult, FunctionsConfig, ServiceProviderConfiguration, UploadFile } from \"./service-provider-model.js\";\nimport { callFunction, initFunctions } from \"./firebase/functions-client.js\";\nimport { initFirestore } from \"./firebase/firestore-client.js\";\nimport { callFunctionMock, initMockResponse } from \"./mock/function-client.js\";\nimport { ServiceCallController } from \"../service-call-controller2.js\";\nimport { initFirestorage, uploadFirestorageFile } from \"./firebase/firestorage-client.js\";\nimport { initStorageMock, uploadStorageFileMock } from \"./mock/storage-client.js\";\n\nlet provider: ServiceProviderConfiguration | undefined;\nlet controller: ServiceCallController;\n\nconst throwUndefinedProviderError = () => {\n throw new Error(\"Undefined service provider, please check configuration. 'firebase' or 'mock' allowed here.\");\n}\n\n/* #####################\n * Init Implementation\n * ##################### */\n\nexport const setServiceProvider = (providerParam?: ServiceProviderConfiguration) => {\n provider = providerParam;\n}\n\nexport const initController = (controllerParam: ServiceCallController) => {\n controller = controllerParam\n}\n\nconst initFirebaseApplicationServices = (\n firebaseApp: FirebaseApp, \n functionsConfig: FunctionsConfig, \n firebaseConfig: FirebaseOptions,\n storageConfig?: FileStorageConfig, \n) => {\n // do something with the app, init db, firestore and functions \n initFunctions(firebaseApp, functionsConfig);\n initFirestore(firebaseApp); \n initFirestorage(firebaseApp, firebaseConfig.storageBucket, storageConfig);\n \n}\n\nexport const initAppImpl = (config: AppConfiguration) => {\n\n if (provider === \"firebase\" && config.firebaseConfig) {\n const app:FirebaseApp = initializeApp(config.firebaseConfig);\n if (config.functionsConfig) { // TODO: invalid if only storage config exists\n // init application services (functions, store) \n initFirebaseApplicationServices(app, config.functionsConfig, config.firebaseConfig, config.storageConfig);\n }\n } else if (provider === \"mock\") {\n initMockResponse(config.mock);\n initStorageMock(\"default\", config.storageConfig);\n } else {\n throwUndefinedProviderError();\n }\n}\n\n/* #####################\n * Functions Implementation\n * ##################### */\nexport const callFunctionImpl = async (def: FunctionDefinition, functionInput: any): Promise<FunctionResult> => {\n \n const callController = (promise: Promise<any>) => {\n if (controller) {\n controller.callDataPromise = {func: def, promise};\n }\n }\n \n if (provider === \"firebase\") {\n const promise = callFunction(def, functionInput)\n callController(promise);\n return promise;\n } \n if (provider === \"mock\") {\n const promise = callFunctionMock(def, functionInput)\n callController(promise);\n return promise;\n }\n\n return throwUndefinedProviderError(); \n}\n\n\n\n/* #####################\n * Auth Implementation\n * ##################### */\n\n\nexport const authStateChangedImpl = (\n callback: Function\n) => {\n if (provider === \"firebase\") {\n authStateChanged(callback);\n } else if (provider === \"mock\") {\n authStateChangedMock();\n } else {\n throwUndefinedProviderError();\n }\n}\n\nexport const isAuthenticatedImpl = () => {\n if (provider === \"firebase\") {\n return isAuthenticated();\n } \n if (provider === \"mock\") {\n return isAuthenticatedMock();\n } \n return throwUndefinedProviderError(); \n}\n\nexport const loginImpl = (user: string, sec: string) => {\n\n if (!user) { \n const returnError = new Error(\"empty user\");\n return Promise.reject(returnError);\n }\n if (!sec) {\n const returnError = new Error(\"empty password\");\n return Promise.reject(returnError);\n }\n\n if (provider === \"firebase\") {\n return login(user, sec);\n } \n if (provider === \"mock\") {\n return loginMock(user, sec);\n } \n return throwUndefinedProviderError(); \n}\n\nexport const logoutImpl = () => {\n if (provider === \"firebase\") {\n return logout();\n } \n if (provider === \"mock\") {\n return logoutMock();\n } \n return throwUndefinedProviderError(); \n}\n\n/* #####################\n * Storage Implementation\n * ##################### */\nexport const uploadFile = (file: UploadFile): Promise<unknown> => { \n if (provider === \"firebase\") {\n return uploadFirestorageFile(file); \n } \n if (provider === \"mock\") {\n return uploadStorageFileMock(file)\n }\n return throwUndefinedProviderError(); \n}"]}
@@ -77,6 +77,13 @@ export interface StoreConfig {
77
77
  reducer: any;
78
78
  effects: Array<any>;
79
79
  }
80
+ export interface FileStorage {
81
+ name: string;
82
+ references: string[];
83
+ }
84
+ export interface FileStorageConfig {
85
+ storage: FileStorage[];
86
+ }
80
87
  export interface AppConfiguration {
81
88
  serviceProvider?: ServiceProviderConfiguration;
82
89
  mock?: {
@@ -86,5 +93,13 @@ export interface AppConfiguration {
86
93
  navigationConfigParam: NavigationConfig;
87
94
  storeConfigParam?: StoreConfig;
88
95
  firebaseConfig?: FirebaseOptions;
96
+ storageConfig?: FileStorageConfig;
89
97
  functionsConfig?: FunctionsConfig;
90
98
  }
99
+ export interface UploadFile {
100
+ fileName: string;
101
+ base64DataURL: string;
102
+ storageName?: string;
103
+ referenceKey?: string;
104
+ subFolderName?: string;
105
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"service-provider-model.js","sourceRoot":"","sources":["../../../src/service-provider/service-provider-model.ts"],"names":[],"mappings":"","sourcesContent":["import { FirebaseOptions } from \"firebase/app\";\nimport { TemplateResult } from \"lit\";\n\n\n/**\n * Implemeted service provider\n */\nexport type ServiceProviderFirebase = \"firebase\";\nexport type ServiceProviderMock = \"mock\";\nexport type ServiceProviderConfiguration = ServiceProviderFirebase | ServiceProviderMock;\n\n\nexport interface FunctionResult {\n resultData: unknown,\n statusCode: number,\n}\n\n/**\n * Function model.\n */\n\nexport interface FunctionDefinition {\n name: string,\n successCodes: Array<Number>, \n // Fade window during function call (true) or show only background infos (false).\n fadeWindow: boolean,\n successTxt: string | TemplateResult,\n pendingTxt: string | TemplateResult,\n param?: any,\n redirect?: string,\n logoutOnFail?: boolean,\n}\n\nexport interface FunctionParam {\n func: FunctionDefinition,\n inputData: any,\n}\n\nexport interface FunctionsConfig {\n region: string, // 'europe-west3'\n functions: Array<FunctionDefinition>,\n postLoginFunc?: FunctionDefinition,\n}\n\n\n/**\n * App data models.\n */\n\nexport interface MenuElement {\n key: string,\n name: string,\n sec?: string,\n route?: string,\n action?: Function,\n topItem?: boolean,\n ref?: any,\n icon?: string,\n}\n\nexport interface NavigationPage {\n name: string,\n mainClass?: string,\n pattern: Array<string>, \n auth: boolean,\n menu?: Array<MenuElement>,\n topMenu?: Array<MenuElement>,\n withTeaser?: boolean,\n withFooter?: boolean\n hideMenu?: boolean\n hideTopMenu?: boolean\n topMenuItems?: Array<MenuElement>,\n}\n\nexport interface NavigationConfig {\n pages: Array<NavigationPage>,\n includeLogin: boolean\n}\n\nexport interface LinkObj {\n name: string,\n key: string,\n link?: string,\n action?: Function\n}\n\nexport interface Footer {\n version: string,\n links: Array<LinkObj>\n}\n\n\nexport interface StoreConfig {\n appName: string,\n reducer: any,\n effects: Array<any>\n}\n\nexport interface AppConfiguration { \n serviceProvider?: ServiceProviderConfiguration,\n mock?: {\n mockResponse?: Map<string, Function>,\n mockWaitTime?: number,\n }\n navigationConfigParam: NavigationConfig;\n storeConfigParam?: StoreConfig;\n firebaseConfig?: FirebaseOptions;\n functionsConfig?: FunctionsConfig;\n}\n\n\n"]}
1
+ {"version":3,"file":"service-provider-model.js","sourceRoot":"","sources":["../../../src/service-provider/service-provider-model.ts"],"names":[],"mappings":"","sourcesContent":["import { FirebaseOptions } from \"firebase/app\";\nimport { TemplateResult } from \"lit\";\n\n\n/**\n * Implemeted service provider\n */\nexport type ServiceProviderFirebase = \"firebase\";\nexport type ServiceProviderMock = \"mock\";\nexport type ServiceProviderConfiguration = ServiceProviderFirebase | ServiceProviderMock;\n\n\nexport interface FunctionResult {\n resultData: unknown,\n statusCode: number,\n}\n\n/**\n * Function model.\n */\n\nexport interface FunctionDefinition {\n name: string,\n successCodes: Array<Number>, \n // Fade window during function call (true) or show only background infos (false).\n fadeWindow: boolean,\n successTxt: string | TemplateResult,\n pendingTxt: string | TemplateResult,\n param?: any,\n redirect?: string,\n logoutOnFail?: boolean,\n}\n\nexport interface FunctionParam {\n func: FunctionDefinition,\n inputData: any,\n}\n\nexport interface FunctionsConfig {\n region: string, // 'europe-west3'\n functions: Array<FunctionDefinition>,\n postLoginFunc?: FunctionDefinition,\n}\n\n\n/**\n * App data models.\n */\n\nexport interface MenuElement {\n key: string,\n name: string,\n sec?: string,\n route?: string,\n action?: Function,\n topItem?: boolean,\n ref?: any,\n icon?: string,\n}\n\nexport interface NavigationPage {\n name: string,\n mainClass?: string,\n pattern: Array<string>, \n auth: boolean,\n menu?: Array<MenuElement>,\n topMenu?: Array<MenuElement>,\n withTeaser?: boolean,\n withFooter?: boolean\n hideMenu?: boolean\n hideTopMenu?: boolean\n topMenuItems?: Array<MenuElement>,\n}\n\nexport interface NavigationConfig {\n pages: Array<NavigationPage>,\n includeLogin: boolean\n}\n\nexport interface LinkObj {\n name: string,\n key: string,\n link?: string,\n action?: Function\n}\n\nexport interface Footer {\n version: string,\n links: Array<LinkObj>\n}\n\n\nexport interface StoreConfig {\n appName: string,\n reducer: any,\n effects: Array<any>\n}\n\nexport interface FileStorage {\n name: string,\n references: string[] \n}\n\nexport interface FileStorageConfig {\n storage: FileStorage[],\n}\n\nexport interface AppConfiguration { \n serviceProvider?: ServiceProviderConfiguration,\n mock?: {\n mockResponse?: Map<string, Function>,\n mockWaitTime?: number,\n }\n navigationConfigParam: NavigationConfig;\n storeConfigParam?: StoreConfig;\n firebaseConfig?: FirebaseOptions;\n storageConfig?: FileStorageConfig;\n functionsConfig?: FunctionsConfig;\n}\n\nexport interface UploadFile { \n fileName: string,\n base64DataURL:string,\n storageName?: string\n referenceKey?: string\n subFolderName?: string,\n}\n\n\n"]}