@gisce/react-ooui 0.9.3 → 0.9.4

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA+C;AAwE7C,uFAxEO,eAAM,OAwEP;AAvER,4CAA2C;AAwEzC,qFAxEO,WAAI,OAwEP;AAvEN,sDAAqD;AAwEnD,0FAxEO,qBAAS,OAwEP;AAvEX,kDAAiD;AAwE/C,wFAxEO,iBAAO,OAwEP;AAvET,6DAA4D;AAwE1D,yFAxEO,mBAAQ,OAwEP;AAvEV,6DAA4D;AAqG1D,yFArGO,mBAAQ,OAqGP;AApGV,8DAAwC;AAuEtC,eAvEK,cAAI,CAuEL;AAtEN,8CAA6C;AA2E3C,sFA3EO,aAAK,OA2EP;AA1EP,0DAAyD;AAyHvD,4FAzHO,yBAAW,OAyHP;AAxHb,sDAAqD;AA0EnD,0FA1EO,qBAAS,OA0EP;AAzEX,kDAAiD;AA0E/C,wFA1EO,iBAAO,OA0EP;AAzET,qEAA+C;AAmE7C,gBAnEK,eAAK,CAmEL;AAlEP,2EAAqD;AAqEnD,mBArEK,kBAAQ,CAqEL;AApEV,8DAAwC;AAmEtC,eAnEK,cAAI,CAmEL;AAlEN,+DAAyC;AAuEvC,gBAvEK,eAAK,CAuEL;AAtEP,6DAAuC;AAuErC,eAvEK,cAAI,CAuEL;AAtEN,sDAAqD;AA0EnD,0FA1EO,qBAAS,OA0EP;AAzEX,2FAAqE;AA8DnE,uBA9DK,sBAAY,CA8DL;AA7Dd,0EAAoD;AAyElD,qBAzEK,oBAAU,CAyEL;AAxEZ,wDAAuD;AAqFrD,0FArFO,qBAAS,OAqFP;AApFX,4DAA2D;AAqFzD,4FArFO,yBAAW,OAqFP;AApFb,6DAAuC;AAwFrC,eAxFK,cAAI,CAwFL;AAvFN,qEAA+C;AAwF7C,mBAxFK,kBAAQ,CAwFL;AAnFV,sDAAqD;AAoFnD,0FApFO,qBAAS,OAoFP;AAnFX,gDAA+C;AAoF7C,uFApFO,eAAM,OAoFP;AAnFR,oEAA8C;AAoF5C,qBApFK,oBAAU,CAoFL;AAnFZ,4EAAkD;AAuFhD,oBAvFK,uBAAS,CAuFL;AAtFX,0CAAyC;AA4FvC,oFA5FO,SAAG,OA4FP;AA3FL,8CAA6C;AA4F3C,sFA5FO,aAAK,OA4FP;AA3FP,8CAA6C;AA4F3C,sFA5FO,aAAK,OA4FP;AA3FP,qEAAmD;AA6FjD,4BA7FK,uBAAiB,CA6FL;AA5FnB,kFAA4D;AAgG1D,oBAhGK,mBAAS,CAgGL;AA/FX,+DAGuC;AA8FrC,kGAhGA,iCAAiB,OAgGA;AACjB,8FAhGA,6BAAa,OAgGA;AA9Ff,uEAAsE;AA4FpE,+FA5FO,+BAAc,OA4FP;AApEhB,4EAAsD;AAgCpD,6BAhCK,4BAAkB,CAgCL;AA/BpB,8DAAwC;AAuDtC,mBAvDK,kBAAQ,CAuDL;AAtDV,oEAA8C;AAuD5C,sBAvDK,qBAAW,CAuDL;AAtDb,gFAA0D;AAuDxD,4BAvDK,2BAAiB,CAuDL;AAtDnB,oFAA+D;AA0D7D,8BA1DK,4BAAmB,CA0DL;AAzDrB,yEAAmD;AA6DjD,0BA7DK,yBAAe,CA6DL"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA+C;AAyE7C,uFAzEO,eAAM,OAyEP;AAxER,4CAA2C;AAyEzC,qFAzEO,WAAI,OAyEP;AAxEN,sDAAqD;AAyEnD,0FAzEO,qBAAS,OAyEP;AAxEX,kDAAiD;AAyE/C,wFAzEO,iBAAO,OAyEP;AAxET,6DAA4D;AAyE1D,yFAzEO,mBAAQ,OAyEP;AAxEV,6DAA4D;AAsG1D,yFAtGO,mBAAQ,OAsGP;AArGV,8DAAwC;AAwEtC,eAxEK,cAAI,CAwEL;AAvEN,8CAA6C;AA4E3C,sFA5EO,aAAK,OA4EP;AA3EP,0DAAyD;AA0HvD,4FA1HO,yBAAW,OA0HP;AAzHb,sDAAqD;AA2EnD,0FA3EO,qBAAS,OA2EP;AA1EX,kDAAiD;AA2E/C,wFA3EO,iBAAO,OA2EP;AA1ET,qEAA+C;AAoE7C,gBApEK,eAAK,CAoEL;AAnEP,2EAAqD;AAsEnD,mBAtEK,kBAAQ,CAsEL;AArEV,8DAAwC;AAoEtC,eApEK,cAAI,CAoEL;AAnEN,+DAAyC;AAwEvC,gBAxEK,eAAK,CAwEL;AAvEP,6DAAuC;AAwErC,eAxEK,cAAI,CAwEL;AAvEN,sDAAqD;AA2EnD,0FA3EO,qBAAS,OA2EP;AA1EX,2FAAqE;AA+DnE,uBA/DK,sBAAY,CA+DL;AA9Dd,0EAAoD;AA0ElD,qBA1EK,oBAAU,CA0EL;AAzEZ,wDAAuD;AAsFrD,0FAtFO,qBAAS,OAsFP;AArFX,4DAA2D;AAsFzD,4FAtFO,yBAAW,OAsFP;AArFb,6DAAuC;AAyFrC,eAzFK,cAAI,CAyFL;AAxFN,qEAA+C;AAyF7C,mBAzFK,kBAAQ,CAyFL;AApFV,sDAAqD;AAqFnD,0FArFO,qBAAS,OAqFP;AApFX,gDAA+C;AAqF7C,uFArFO,eAAM,OAqFP;AApFR,oEAA8C;AAqF5C,qBArFK,oBAAU,CAqFL;AApFZ,4EAAkD;AAwFhD,oBAxFK,uBAAS,CAwFL;AAvFX,0CAAyC;AA6FvC,oFA7FO,SAAG,OA6FP;AA5FL,8CAA6C;AA6F3C,sFA7FO,aAAK,OA6FP;AA5FP,8CAA6C;AA6F3C,sFA7FO,aAAK,OA6FP;AA5FP,qEAAmD;AA8FjD,4BA9FK,uBAAiB,CA8FL;AA7FnB,kFAA4D;AAiG1D,oBAjGK,mBAAS,CAiGL;AAhGX,8CAA6C;AAoG3C,qFApGO,WAAI,OAoGP;AAnGN,+DAGuC;AA8FrC,kGAhGA,iCAAiB,OAgGA;AACjB,8FAhGA,6BAAa,OAgGA;AA9Ff,uEAAsE;AA4FpE,+FA5FO,+BAAc,OA4FP;AApEhB,4EAAsD;AAgCpD,6BAhCK,4BAAkB,CAgCL;AA/BpB,8DAAwC;AAuDtC,mBAvDK,kBAAQ,CAuDL;AAtDV,oEAA8C;AAuD5C,sBAvDK,qBAAW,CAuDL;AAtDb,gFAA0D;AAuDxD,4BAvDK,2BAAiB,CAuDL;AAtDnB,oFAA+D;AA0D7D,8BA1DK,4BAAmB,CA0DL;AAzDrB,yEAAmD;AA6DjD,0BA7DK,yBAAe,CA6DL"}
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import { Tags as TagsOoui } from "@gisce/ooui";
3
+ import { One2manyValue } from "../base/one2many/One2manyInput";
4
+ declare type TagsProps = {
5
+ ooui: TagsOoui;
6
+ };
7
+ declare type TagsInputProps = TagsProps & {
8
+ value?: One2manyValue;
9
+ onChange?: (value: One2manyValue) => void;
10
+ };
11
+ export declare const Tags: (props: TagsProps) => JSX.Element;
12
+ export declare const TagsInput: (props: TagsInputProps) => JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=Tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tags.d.ts","sourceRoot":"","sources":["../../../src/widgets/custom/Tags.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAgB,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAO7E,aAAK,SAAS,GAAG;IACf,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,aAAK,cAAc,GAAG,SAAS,GAAG;IAChC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,eAAO,MAAM,IAAI,UAAW,SAAS,gBAuCpC,CAAC;AAEF,eAAO,MAAM,SAAS,UAAW,cAAc,gBAgF9C,CAAC"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
32
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
33
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
34
+ return new (P || (P = Promise))(function (resolve, reject) {
35
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
36
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
37
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
39
+ });
40
+ };
41
+ var __generator = (this && this.__generator) || function (thisArg, body) {
42
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
43
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
44
+ function verb(n) { return function (v) { return step([n, v]); }; }
45
+ function step(op) {
46
+ if (f) throw new TypeError("Generator is already executing.");
47
+ while (_) try {
48
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
49
+ if (y = 0, t) op = [op[0] & 2, t.value];
50
+ switch (op[0]) {
51
+ case 0: case 1: t = op; break;
52
+ case 4: _.label++; return { value: op[1], done: false };
53
+ case 5: _.label++; y = op[1]; op = [0]; continue;
54
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
55
+ default:
56
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
57
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
58
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
59
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
60
+ if (t[2]) _.ops.pop();
61
+ _.trys.pop(); continue;
62
+ }
63
+ op = body.call(thisArg, _);
64
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
65
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
66
+ }
67
+ };
68
+ var __importDefault = (this && this.__importDefault) || function (mod) {
69
+ return (mod && mod.__esModule) ? mod : { "default": mod };
70
+ };
71
+ Object.defineProperty(exports, "__esModule", { value: true });
72
+ exports.TagsInput = exports.Tags = void 0;
73
+ var react_1 = __importStar(require("react"));
74
+ var Field_1 = __importDefault(require("@/common/Field"));
75
+ var use_deep_compare_effect_1 = __importDefault(require("use-deep-compare-effect"));
76
+ var FormContext_1 = require("@/context/FormContext");
77
+ var antd_1 = require("antd");
78
+ var one2manyHelper_1 = require("@/helpers/one2manyHelper");
79
+ var Tags = function (props) {
80
+ var ooui = props.ooui;
81
+ var relation = ooui.relation, context = ooui.context;
82
+ var _a = react_1.useState(true), isLoading = _a[0], setIsLoading = _a[1];
83
+ var _b = react_1.useState(), error = _b[0], setError = _b[1];
84
+ var formContext = react_1.useContext(FormContext_1.FormContext);
85
+ var getContext = (formContext || {}).getContext;
86
+ use_deep_compare_effect_1.default(function () {
87
+ fetchData();
88
+ }, [ooui]);
89
+ var fetchData = function () { return __awaiter(void 0, void 0, void 0, function () {
90
+ return __generator(this, function (_a) {
91
+ setIsLoading(true);
92
+ setError(undefined);
93
+ try {
94
+ console.log('Fetching....');
95
+ }
96
+ catch (err) {
97
+ setError(err);
98
+ }
99
+ finally {
100
+ setIsLoading(false);
101
+ }
102
+ return [2 /*return*/];
103
+ });
104
+ }); };
105
+ if (isLoading) {
106
+ return react_1.default.createElement(antd_1.Spin, null);
107
+ }
108
+ if (error) {
109
+ return react_1.default.createElement(antd_1.Alert, { className: "mt-10", message: error, type: "error", banner: true });
110
+ }
111
+ return (react_1.default.createElement(Field_1.default, __assign({ type: "array" }, props),
112
+ react_1.default.createElement(exports.TagsInput, { ooui: ooui })));
113
+ };
114
+ exports.Tags = Tags;
115
+ var TagsInput = function (props) {
116
+ var value = props.value, ooui = props.ooui, onChange = props.onChange;
117
+ var _a = (value || {}).items, items = _a === void 0 ? [] : _a;
118
+ var _b = react_1.useState(false), isLoading = _b[0], setIsLoading = _b[1];
119
+ var _c = react_1.useState(), error = _c[0], setError = _c[1];
120
+ var relation = ooui.relation, context = ooui.context, readOnly = ooui.readOnly, field = ooui.field;
121
+ var itemsToShow = items.filter(function (item) { return item.values && item.operation !== "pendingRemove"; });
122
+ var formContext = react_1.useContext(FormContext_1.FormContext);
123
+ var getContext = (formContext || {}).getContext;
124
+ use_deep_compare_effect_1.default(function () {
125
+ fetchData();
126
+ }, [items]);
127
+ var triggerChange = function (changedValue) {
128
+ onChange === null || onChange === void 0 ? void 0 : onChange({
129
+ items: changedValue,
130
+ });
131
+ };
132
+ function fetchData() {
133
+ return __awaiter(this, void 0, void 0, function () {
134
+ var itemsWithValues, err_1;
135
+ return __generator(this, function (_a) {
136
+ switch (_a.label) {
137
+ case 0:
138
+ setIsLoading(true);
139
+ setError(undefined);
140
+ _a.label = 1;
141
+ case 1:
142
+ _a.trys.push([1, 3, 4, 5]);
143
+ return [4 /*yield*/, one2manyHelper_1.readObjectValues({
144
+ treeFields: [ooui.field],
145
+ formFields: [],
146
+ model: relation,
147
+ items: items,
148
+ context: __assign(__assign({}, getContext === null || getContext === void 0 ? void 0 : getContext()), context),
149
+ })];
150
+ case 2:
151
+ itemsWithValues = _a.sent();
152
+ triggerChange(itemsWithValues);
153
+ return [3 /*break*/, 5];
154
+ case 3:
155
+ err_1 = _a.sent();
156
+ setError(err_1);
157
+ return [3 /*break*/, 5];
158
+ case 4:
159
+ setIsLoading(false);
160
+ return [7 /*endfinally*/];
161
+ case 5: return [2 /*return*/];
162
+ }
163
+ });
164
+ });
165
+ }
166
+ if (error) {
167
+ return react_1.default.createElement(antd_1.Alert, { className: "mt-10", message: error, type: "error", banner: true });
168
+ }
169
+ if (isLoading) {
170
+ return react_1.default.createElement(antd_1.Spin, null);
171
+ }
172
+ var color = function (text) {
173
+ var hash = 0;
174
+ for (var i = 0; i < text.length; i++) {
175
+ hash = text.charCodeAt(i) + ((hash << 5) - hash);
176
+ }
177
+ var colour = '#';
178
+ for (var i = 0; i < 3; i++) {
179
+ var value = (hash >> (i * 8)) & 0xFF;
180
+ colour += ('00' + value.toString(16)).substr(-2);
181
+ }
182
+ return colour;
183
+ };
184
+ return (react_1.default.createElement(react_1.default.Fragment, null,
185
+ react_1.default.createElement("div", { style: { padding: "1rem" } }, itemsToShow.map(function (item, index) {
186
+ var _a;
187
+ var value = (_a = item.values) === null || _a === void 0 ? void 0 : _a[field];
188
+ return (react_1.default.createElement(antd_1.Tag, { key: index, color: color(value) }, value));
189
+ }))));
190
+ };
191
+ exports.TagsInput = TagsInput;
192
+ //# sourceMappingURL=Tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tags.js","sourceRoot":"","sources":["../../../src/widgets/custom/Tags.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gisce/react-ooui",
3
- "version": "0.9.3",
3
+ "version": "0.9.4",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@ant-design/charts": "^1.3.6",
27
- "@gisce/ooui": "^0.7.1",
27
+ "@gisce/ooui": "^0.7.2",
28
28
  "@gisce/react-formiga-table": "^0.3.0",
29
29
  "fiber-diagram": "github:gisce/fiber-diagram",
30
30
  "file-type": "^16.5.0",
package/src/index.ts CHANGED
@@ -34,6 +34,7 @@ import { Email } from "@/widgets/base/Email";
34
34
  import { Image } from "@/widgets/base/Image";
35
35
  import showConfirmDialog from "@/ui/ConfirmDialog";
36
36
  import Dashboard from "@/widgets/views/Dashboard/Dashboard";
37
+ import { Tags } from "@/widgets/custom/Tags";
37
38
  import {
38
39
  DashboardGridItem,
39
40
  DashboardGrid,
@@ -133,4 +134,5 @@ export {
133
134
  GraphIndicator,
134
135
  DashboardGridItem,
135
136
  DashboardGrid,
137
+ Tags,
136
138
  };
@@ -0,0 +1,30 @@
1
+ import React from "react";
2
+
3
+ import { TagsInput } from "../../widgets/custom/Tags";
4
+ import { Tags as TagsOoui } from "@gisce/ooui";
5
+ import "antd/dist/antd.css";
6
+ import LocaleProvider from "../../context/LocaleContext";
7
+ import { One2manyInput } from "../../widgets/base/one2many/One2manyInput";
8
+
9
+ export default {
10
+ title: "Components/Widgets/Custom/Tags",
11
+ };
12
+
13
+ export const Default = (): React.ReactElement => {
14
+ const ooui = new TagsOoui({
15
+ name: "button_field",
16
+ string: "Lorem ipsum",
17
+ field: "name"
18
+ });
19
+
20
+ return (
21
+ <LocaleProvider lang="en_US">
22
+ <TagsInput ooui={ooui} value={{items: [
23
+ {id: 1, operation: "original", values: {name: "test"}},
24
+ {id: 2, operation: "original", values: {name: "foo"}},
25
+ {id: 3, operation: "pendingRemove", values: {name: "remove"}}
26
+ ]}}
27
+ />
28
+ </LocaleProvider>
29
+ );
30
+ };
@@ -0,0 +1,141 @@
1
+ import React, { useContext, useState } from "react";
2
+ import { Tags as TagsOoui } from "@gisce/ooui";
3
+ import Field from "@/common/Field";
4
+ import { One2manyItem, One2manyValue } from "../base/one2many/One2manyInput";
5
+ import useDeepCompareEffect from "use-deep-compare-effect";
6
+ import { FormContext, FormContextType } from "@/context/FormContext";
7
+ import ConnectionProvider from "@/ConnectionProvider";
8
+ import { Spin, Alert, Timeline as AntTimeline, Tag as AntTag } from "antd";
9
+ import { readObjectValues } from "@/helpers/one2manyHelper";
10
+
11
+ type TagsProps = {
12
+ ooui: TagsOoui;
13
+ };
14
+
15
+ type TagsInputProps = TagsProps & {
16
+ value?: One2manyValue;
17
+ onChange?: (value: One2manyValue) => void;
18
+ };
19
+
20
+ export const Tags = (props: TagsProps) => {
21
+ const { ooui } = props;
22
+ const { relation, context } = ooui;
23
+ const [isLoading, setIsLoading] = useState<boolean>(true);
24
+ const [error, setError] = useState<string>();
25
+ const formContext = useContext(FormContext) as FormContextType;
26
+ const { getContext } = formContext || {};
27
+
28
+ useDeepCompareEffect(() => {
29
+ fetchData();
30
+ }, [ooui]);
31
+
32
+
33
+ const fetchData = async () => {
34
+ setIsLoading(true);
35
+ setError(undefined);
36
+
37
+ try {
38
+ console.log('Fetching....')
39
+ } catch (err) {
40
+ setError(err as any);
41
+ } finally {
42
+ setIsLoading(false);
43
+ }
44
+ };
45
+
46
+ if (isLoading) {
47
+ return <Spin />;
48
+ }
49
+
50
+ if (error) {
51
+ return <Alert className="mt-10" message={error} type="error" banner />;
52
+ }
53
+
54
+ return (
55
+ <Field type={"array"} {...props}>
56
+ <TagsInput ooui={ooui} />
57
+ </Field>
58
+ );
59
+ };
60
+
61
+ export const TagsInput = (props: TagsInputProps) => {
62
+ const { value, ooui, onChange } = props;
63
+ const { items = [] } = value || {};
64
+
65
+ const [isLoading, setIsLoading] = useState<boolean>(false);
66
+ const [error, setError] = useState<string>();
67
+ const { relation, context, readOnly, field } = ooui;
68
+ const itemsToShow = items.filter(
69
+ (item) => item.values && item.operation !== "pendingRemove"
70
+ );
71
+
72
+ const formContext = useContext(FormContext) as FormContextType;
73
+ const { getContext } = formContext || {};
74
+
75
+ useDeepCompareEffect(() => {
76
+ fetchData();
77
+ }, [items]);
78
+
79
+ const triggerChange = (changedValue: Array<One2manyItem>) => {
80
+ onChange?.({
81
+ items: changedValue,
82
+ });
83
+ };
84
+
85
+ async function fetchData() {
86
+ setIsLoading(true);
87
+ setError(undefined);
88
+
89
+ try {
90
+ const itemsWithValues = await readObjectValues({
91
+ treeFields: [ooui.field],
92
+ formFields: [],
93
+ model: relation,
94
+ items,
95
+ context: { ...getContext?.(), ...context },
96
+ });
97
+
98
+ triggerChange(itemsWithValues);
99
+ } catch (err) {
100
+ setError(err as any);
101
+ } finally {
102
+ setIsLoading(false);
103
+ }
104
+ }
105
+
106
+ if (error) {
107
+ return <Alert className="mt-10" message={error} type="error" banner />;
108
+ }
109
+
110
+ if (isLoading) {
111
+ return <Spin />;
112
+ }
113
+
114
+ const color = (text: string) => {
115
+ let hash = 0;
116
+ for (let i = 0; i < text.length; i++) {
117
+ hash = text.charCodeAt(i) + ((hash << 5) - hash);
118
+ }
119
+ var colour = '#';
120
+ for (let i = 0; i < 3; i++) {
121
+ var value = (hash >> (i * 8)) & 0xFF;
122
+ colour += ('00' + value.toString(16)).substr(-2);
123
+ }
124
+ return colour;
125
+ }
126
+
127
+ return (
128
+ <>
129
+ <div style={{ padding: "1rem" }}>
130
+
131
+ {itemsToShow.map((item, index) => {
132
+ const value = item.values?.[field];
133
+ return (
134
+ <AntTag key={index} color={color(value)}>{value}</AntTag>
135
+ );
136
+ })}
137
+ </div>
138
+
139
+ </>
140
+ );
141
+ };