@vanillabp/bc-ui 0.0.3

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.
Files changed (47) hide show
  1. package/README.md +1 -0
  2. package/dist/chunk-YH4NJHER.js +58 -0
  3. package/dist/components/ListCell.d.ts +27 -0
  4. package/dist/components/ListCell.js +123 -0
  5. package/dist/components/ListColumnHeader.d.ts +22 -0
  6. package/dist/components/ListColumnHeader.js +135 -0
  7. package/dist/components/ListOfTasks.d.ts +35 -0
  8. package/dist/components/ListOfTasks.js +1327 -0
  9. package/dist/components/ListOfWorkflows.d.ts +36 -0
  10. package/dist/components/ListOfWorkflows.js +974 -0
  11. package/dist/components/NoElementGivenByModule.d.ts +10 -0
  12. package/dist/components/NoElementGivenByModule.js +54 -0
  13. package/dist/components/NoUserTaskGiven.d.ts +10 -0
  14. package/dist/components/NoUserTaskGiven.js +23 -0
  15. package/dist/components/NoWorkflowGiven.d.ts +10 -0
  16. package/dist/components/NoWorkflowGiven.js +22 -0
  17. package/dist/components/SearchableAndSortableUpdatingList.d.ts +49 -0
  18. package/dist/components/SearchableAndSortableUpdatingList.js +200 -0
  19. package/dist/components/SnapScrolling.d.ts +15 -0
  20. package/dist/components/SnapScrolling.js +17 -0
  21. package/dist/components/SnapScrollingDataTable.d.ts +17 -0
  22. package/dist/components/SnapScrollingDataTable.js +113 -0
  23. package/dist/components/User.d.ts +11 -0
  24. package/dist/components/User.js +39 -0
  25. package/dist/components/UserAvatar.d.ts +12 -0
  26. package/dist/components/UserAvatar.js +133 -0
  27. package/dist/components/UserTaskPage.d.ts +24 -0
  28. package/dist/components/UserTaskPage.js +121 -0
  29. package/dist/components/WorkflowPage.d.ts +16 -0
  30. package/dist/components/WorkflowPage.js +124 -0
  31. package/dist/components/index.d.ts +25 -0
  32. package/dist/components/index.js +13 -0
  33. package/dist/index.d.ts +25 -0
  34. package/dist/index.js +3 -0
  35. package/dist/types/apis.d.ts +50 -0
  36. package/dist/types/apis.js +0 -0
  37. package/dist/types/index.d.ts +7 -0
  38. package/dist/types/index.js +3 -0
  39. package/dist/types/lists.d.ts +12 -0
  40. package/dist/types/lists.js +0 -0
  41. package/dist/types/navigate.d.ts +6 -0
  42. package/dist/types/navigate.js +0 -0
  43. package/dist/utils/index.d.ts +2 -0
  44. package/dist/utils/index.js +1 -0
  45. package/dist/utils/module-federation.d.ts +40 -0
  46. package/dist/utils/module-federation.js +182 -0
  47. package/package.json +66 -0
@@ -0,0 +1,182 @@
1
+ import {
2
+ __async,
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "../chunk-YH4NJHER.js";
6
+ import { useEffect, useState } from "react";
7
+ var UiUriType = /* @__PURE__ */ ((UiUriType2) => {
8
+ UiUriType2["External"] = "EXTERNAL";
9
+ UiUriType2["WebpackMfReact"] = "WEBPACK_MF_REACT";
10
+ return UiUriType2;
11
+ })(UiUriType || {});
12
+ ;
13
+ ;
14
+ ;
15
+ ;
16
+ ;
17
+ const modules = {};
18
+ const attachScript = (webpackModuleId, url) => {
19
+ const elementId = "___" + webpackModuleId;
20
+ const existingElement = document.getElementById(elementId);
21
+ if (existingElement) {
22
+ if (window[webpackModuleId])
23
+ return Promise.resolve(true);
24
+ return Promise.reject(`Failed in previous attempt: ${webpackModuleId}`);
25
+ }
26
+ const element = document.createElement("script");
27
+ element.src = url;
28
+ element.type = "text/javascript";
29
+ element.async = true;
30
+ element.id = elementId;
31
+ const scriptLoadPromise = new Promise(
32
+ (resolve, reject) => {
33
+ element.onload = () => resolve(element);
34
+ element.onerror = (e) => {
35
+ reject(e);
36
+ };
37
+ }
38
+ );
39
+ document.head.appendChild(element);
40
+ return scriptLoadPromise;
41
+ };
42
+ const detachScript = (webpackModuleId) => {
43
+ const element = document.getElementById("___" + webpackModuleId);
44
+ if (element)
45
+ document.head.removeChild(element);
46
+ };
47
+ const fetchModule = (workflowModuleId, uiUri, initialTry, useCase) => __async(void 0, null, function* () {
48
+ const webpackModuleId = workflowModuleId.replaceAll("-", "_");
49
+ if (!initialTry) {
50
+ detachScript(webpackModuleId);
51
+ }
52
+ let container = window[webpackModuleId];
53
+ if (container === void 0) {
54
+ yield attachScript(webpackModuleId, uiUri);
55
+ yield __webpack_init_sharing__("default");
56
+ container = window[webpackModuleId];
57
+ }
58
+ if (!container.isInitialized) {
59
+ container.isInitialized = true;
60
+ yield container.init(__webpack_share_scopes__.default);
61
+ } else if (!("isInitialized" in container)) {
62
+ throw new Error(`Failed in last attempt: ${webpackModuleId}`);
63
+ }
64
+ const factory = yield window[webpackModuleId].get(useCase);
65
+ return factory();
66
+ });
67
+ const loadModule = (moduleId, moduleDefinition, useCase) => {
68
+ const callbacks = [];
69
+ let module = modules[moduleId];
70
+ if (module === void 0) {
71
+ module = { moduleId, workflowModuleId: moduleDefinition.workflowModuleId };
72
+ modules[moduleId] = module;
73
+ }
74
+ const publish = () => callbacks.forEach((callback) => callback(modules[moduleId]));
75
+ const retry = (retryCallback, initialTry) => __async(void 0, null, function* () {
76
+ if (module.buildTimestamp !== void 0)
77
+ return;
78
+ try {
79
+ if (moduleDefinition.uiUriType === "WEBPACK_MF_REACT" /* WebpackMfReact */) {
80
+ const webpackModule = yield fetchModule(moduleDefinition.workflowModuleId, moduleDefinition.uiUri, initialTry || false, useCase);
81
+ modules[moduleId] = __spreadValues(__spreadValues({}, webpackModule), module);
82
+ } else {
83
+ throw new Error(`Unsupported UiUriType: ${moduleDefinition.uiUriType}!`);
84
+ }
85
+ } catch (error) {
86
+ modules[moduleId] = __spreadProps(__spreadValues({}, module), {
87
+ retry
88
+ });
89
+ } finally {
90
+ publish();
91
+ if (retryCallback) {
92
+ retryCallback();
93
+ }
94
+ }
95
+ });
96
+ const subscribe = (callback) => {
97
+ if (callbacks.includes(callback))
98
+ return;
99
+ callbacks.push(callback);
100
+ };
101
+ const unsubscribe = (callback) => {
102
+ const index = callbacks.indexOf(callback);
103
+ if (index === -1)
104
+ return;
105
+ callbacks.splice(index, 1);
106
+ };
107
+ retry(void 0, true);
108
+ return { subscribe, unsubscribe };
109
+ };
110
+ const getModule = (moduleId, moduleDefinition, useCase) => {
111
+ let result = modules[moduleId];
112
+ if (result !== void 0) {
113
+ return {
114
+ subscribe: (handler) => handler(result),
115
+ unsubscribe: (handler) => {
116
+ }
117
+ };
118
+ }
119
+ return loadModule(moduleId, moduleDefinition, useCase);
120
+ };
121
+ const useFederationModule = (moduleDefinition, useCase) => {
122
+ const moduleId = moduleDefinition !== void 0 ? `${moduleDefinition.workflowModuleId}#${useCase}` : "undefined";
123
+ const [module, setModule] = useState(modules[moduleId]);
124
+ useEffect(() => {
125
+ if (moduleDefinition === void 0) {
126
+ return void 0;
127
+ }
128
+ const { subscribe, unsubscribe } = getModule(moduleId, moduleDefinition, useCase);
129
+ const handler = (loadedModule) => setModule(loadedModule);
130
+ subscribe(handler);
131
+ return () => unsubscribe(handler);
132
+ }, [setModule, moduleDefinition, useCase]);
133
+ return module;
134
+ };
135
+ const useFederationModules = (moduleDefinitions, useCase) => {
136
+ const [modules2, setModules] = useState(void 0);
137
+ useEffect(() => {
138
+ if (moduleDefinitions === void 0) {
139
+ return;
140
+ }
141
+ if (moduleDefinitions.length === 0) {
142
+ setModules([]);
143
+ return;
144
+ }
145
+ const distinctModuleDefinitions = moduleDefinitions.reduce(
146
+ (moduleIds, userTask) => moduleIds.includes(userTask.workflowModuleId) ? moduleIds : moduleIds.concat(userTask.workflowModuleId),
147
+ new Array()
148
+ ).map((moduleId) => moduleDefinitions.find((moduleDefinition) => moduleDefinition.workflowModuleId === moduleId));
149
+ const result = [];
150
+ distinctModuleDefinitions.forEach((moduleDefinition, i) => {
151
+ result[i] = {
152
+ moduleId: `${moduleDefinition.workflowModuleId}#${useCase}`,
153
+ workflowModuleId: moduleDefinition.workflowModuleId
154
+ };
155
+ });
156
+ const unsubscribers = distinctModuleDefinitions.map((moduleDefinition, index) => {
157
+ const { subscribe, unsubscribe } = getModule(result[index].moduleId, moduleDefinition, useCase);
158
+ const handler = (loadedModule) => {
159
+ result[index] = loadedModule;
160
+ const anyModuleStillLoading = result.reduce(
161
+ (anyModuleStillLoading2, module) => anyModuleStillLoading2 || module === void 0 || module.buildTimestamp === void 0 && module.retry === void 0,
162
+ false
163
+ );
164
+ if (anyModuleStillLoading) {
165
+ return;
166
+ }
167
+ setModules(result);
168
+ };
169
+ subscribe(handler);
170
+ return () => unsubscribe(handler);
171
+ });
172
+ return () => unsubscribers.forEach((unsubscribe) => unsubscribe());
173
+ }, [moduleDefinitions, useCase, setModules]);
174
+ return modules2;
175
+ };
176
+ export {
177
+ UiUriType,
178
+ attachScript,
179
+ detachScript,
180
+ useFederationModule,
181
+ useFederationModules
182
+ };
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@vanillabp/bc-ui",
3
+ "version": "0.0.3",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/vanillabp/business-cockpit.git"
7
+ },
8
+ "homepage": "https://github.com/vanillabp/business-cockpit",
9
+ "sideEffects": false,
10
+ "type": "module",
11
+ "main": "dist/index.js",
12
+ "module": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "files": [
15
+ "dist",
16
+ "package.json"
17
+ ],
18
+ "dependencies": {
19
+ "@vanillabp/bc-official-gui-client": "0.0.3",
20
+ "@vanillabp/bc-shared": "0.0.3"
21
+ },
22
+ "peerDependencies": {
23
+ "@fontsource/roboto": "4.5.8",
24
+ "grommet": "2.33.2",
25
+ "grommet-icons": "4.10.0",
26
+ "react": "18.2.0",
27
+ "react-dom": "18.2.0",
28
+ "react-jsx": "1.0.0",
29
+ "styled-components": "5.3.3"
30
+ },
31
+ "devDependencies": {
32
+ "@babel/preset-env": "7.21.4",
33
+ "@babel/preset-react": "7.18.6",
34
+ "@babel/preset-typescript": "7.21.4",
35
+ "@storybook/addon-essentials": "7.0.6",
36
+ "@storybook/addon-interactions": "7.0.6",
37
+ "@storybook/addon-links": "7.0.6",
38
+ "@storybook/blocks": "7.0.6",
39
+ "@storybook/react": "7.0.6",
40
+ "@storybook/react-webpack5": "7.0.6",
41
+ "@storybook/testing-library": "0.0.14-next.2",
42
+ "@types/node": "16.18.23",
43
+ "@types/react": "18.0.21",
44
+ "@types/react-dom": "18.0.6",
45
+ "@types/styled-components": "5.1.24",
46
+ "@types/web": "0.0.61",
47
+ "cross-env": "7.0.3",
48
+ "http-proxy-middleware": "2.0.6",
49
+ "prop-types": "15.8.1",
50
+ "react": "18.2.0",
51
+ "react-dom": "18.2.0",
52
+ "storybook": "7.0.6",
53
+ "tsup": "6.7.0",
54
+ "typescript": "4.8.4"
55
+ },
56
+ "scripts": {
57
+ "storybook": "echo 'Run with sudo on Linux for HMR!' && storybook dev -p 6006",
58
+ "build-storybook": "storybook build",
59
+ "start": "tsup --watch",
60
+ "build": "tsup",
61
+ "unpublish:snapshot": "npm unpublish --force",
62
+ "publish:snapshot": "npm publish --tag snapshot",
63
+ "version:snapshot": "npm version ${npm_config_newversion} --no-git-tag-version",
64
+ "publish:release": "npm publish --access public"
65
+ }
66
+ }