@qoretechnologies/reqraft 0.3.1 → 0.3.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 (93) hide show
  1. package/dist/components/form/fields/Field.js +24 -31
  2. package/dist/components/form/fields/Field.js.map +1 -1
  3. package/dist/components/form/fields/boolean/Boolean.js +5 -9
  4. package/dist/components/form/fields/boolean/Boolean.js.map +1 -1
  5. package/dist/components/form/fields/color/Color.js +7 -14
  6. package/dist/components/form/fields/color/Color.js.map +1 -1
  7. package/dist/components/form/fields/cron/Cron.js +12 -19
  8. package/dist/components/form/fields/cron/Cron.js.map +1 -1
  9. package/dist/components/form/fields/long-string/LongString.js +5 -9
  10. package/dist/components/form/fields/long-string/LongString.js.map +1 -1
  11. package/dist/components/form/fields/markdown/Markdown.js +13 -20
  12. package/dist/components/form/fields/markdown/Markdown.js.map +1 -1
  13. package/dist/components/form/fields/number/Number.js +5 -9
  14. package/dist/components/form/fields/number/Number.js.map +1 -1
  15. package/dist/components/form/fields/radio-group/RadioGroup.js +7 -11
  16. package/dist/components/form/fields/radio-group/RadioGroup.js.map +1 -1
  17. package/dist/components/form/fields/string/String.js +4 -8
  18. package/dist/components/form/fields/string/String.js.map +1 -1
  19. package/dist/components/form/index.js +8 -24
  20. package/dist/components/form/index.js.map +1 -1
  21. package/dist/components/menu/Menu.js +23 -31
  22. package/dist/components/menu/Menu.js.map +1 -1
  23. package/dist/contexts/FetchContext.js +2 -5
  24. package/dist/contexts/FetchContext.js.map +1 -1
  25. package/dist/contexts/ReqraftContext.js +2 -5
  26. package/dist/contexts/ReqraftContext.js.map +1 -1
  27. package/dist/contexts/StorageContext.js +2 -5
  28. package/dist/contexts/StorageContext.js.map +1 -1
  29. package/dist/hooks/useFetch/useFetch.js +10 -14
  30. package/dist/hooks/useFetch/useFetch.js.map +1 -1
  31. package/dist/hooks/useReqraftProperty.js +4 -8
  32. package/dist/hooks/useReqraftProperty.js.map +1 -1
  33. package/dist/hooks/useStorage/useStorage.d.ts.map +1 -1
  34. package/dist/hooks/useStorage/useStorage.js +13 -13
  35. package/dist/hooks/useStorage/useStorage.js.map +1 -1
  36. package/dist/hooks/useValidation.js +1 -5
  37. package/dist/hooks/useValidation.js.map +1 -1
  38. package/dist/index.js +6 -30
  39. package/dist/index.js.map +1 -1
  40. package/dist/providers/FetchProvider.js +11 -15
  41. package/dist/providers/FetchProvider.js.map +1 -1
  42. package/dist/providers/ReqraftProvider.js +12 -17
  43. package/dist/providers/ReqraftProvider.js.map +1 -1
  44. package/dist/providers/StorageProvider.d.ts +1 -1
  45. package/dist/providers/StorageProvider.d.ts.map +1 -1
  46. package/dist/providers/StorageProvider.js +17 -21
  47. package/dist/providers/StorageProvider.js.map +1 -1
  48. package/dist/types/Form.js +1 -2
  49. package/dist/types.js +1 -2
  50. package/dist/utils/fetch.js +12 -17
  51. package/dist/utils/fetch.js.map +1 -1
  52. package/package.json +1 -1
  53. package/src/components/form/fields/Field.stories.tsx +165 -0
  54. package/src/components/form/fields/Field.tsx +172 -0
  55. package/src/components/form/fields/boolean/Boolean.stories.tsx +46 -0
  56. package/src/components/form/fields/boolean/Boolean.tsx +34 -0
  57. package/src/components/form/fields/color/Color.stories.tsx +60 -0
  58. package/src/components/form/fields/color/Color.tsx +43 -0
  59. package/src/components/form/fields/cron/Cron.stories.tsx +60 -0
  60. package/src/components/form/fields/cron/Cron.tsx +77 -0
  61. package/src/components/form/fields/long-string/LongString.stories.tsx +62 -0
  62. package/src/components/form/fields/long-string/LongString.tsx +35 -0
  63. package/src/components/form/fields/markdown/Markdown.stories.tsx +47 -0
  64. package/src/components/form/fields/markdown/Markdown.tsx +106 -0
  65. package/src/components/form/fields/number/Number.stories.tsx +74 -0
  66. package/src/components/form/fields/number/Number.tsx +53 -0
  67. package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +79 -0
  68. package/src/components/form/fields/radio-group/RadioGroup.tsx +46 -0
  69. package/src/components/form/fields/radio-group/images/java-96x128.png +0 -0
  70. package/src/components/form/fields/radio-group/images/python-129x128.png +0 -0
  71. package/src/components/form/fields/radio-group/images/qore-106x128.png +0 -0
  72. package/src/components/form/fields/string/String.stories.tsx +70 -0
  73. package/src/components/form/fields/string/String.tsx +43 -0
  74. package/src/components/form/index.tsx +8 -0
  75. package/src/components/menu/Menu.stories.tsx +73 -0
  76. package/src/components/menu/Menu.tsx +244 -0
  77. package/src/contexts/FetchContext.tsx +25 -0
  78. package/src/contexts/ReqraftContext.tsx +9 -0
  79. package/src/contexts/StorageContext.tsx +33 -0
  80. package/src/global.d.ts +4 -0
  81. package/src/hooks/useFetch/useFetch.stories.tsx +123 -0
  82. package/src/hooks/useFetch/useFetch.tsx +71 -0
  83. package/src/hooks/useReqraftProperty.ts +16 -0
  84. package/src/hooks/useStorage/useStorage.stories.tsx +85 -0
  85. package/src/hooks/useStorage/useStorage.ts +43 -0
  86. package/src/hooks/useValidation.ts +9 -0
  87. package/src/index.tsx +17 -0
  88. package/src/providers/FetchProvider.tsx +40 -0
  89. package/src/providers/ReqraftProvider.tsx +52 -0
  90. package/src/providers/StorageProvider.tsx +85 -0
  91. package/src/types/Form.ts +46 -0
  92. package/src/types.ts +14 -0
  93. package/src/utils/fetch.ts +121 -0
@@ -1,55 +1,51 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ReqraftStorageProvider = void 0;
4
- var jsx_runtime_1 = require("react/jsx-runtime");
5
- var lodash_1 = require("lodash");
6
- var react_1 = require("react");
7
- var StorageContext_1 = require("../contexts/StorageContext");
8
- var useFetch_1 = require("../hooks/useFetch/useFetch");
9
- var useReqraftProperty_1 = require("../hooks/useReqraftProperty");
10
- var ReqraftStorageProvider = function (_a) {
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cloneDeep, get, set } from 'lodash';
3
+ import { useEffect, useState } from 'react';
4
+ import { ReqraftStorageContext } from '../contexts/StorageContext';
5
+ import { useFetch } from '../hooks/useFetch/useFetch';
6
+ import { useReqraftProperty } from '../hooks/useReqraftProperty';
7
+ export var ReqraftStorageProvider = function (_a) {
11
8
  var children = _a.children, waitForStorage = _a.waitForStorage;
12
- var appName = (0, useReqraftProperty_1.useReqraftProperty)('appName');
13
- var _b = (0, useFetch_1.useFetch)({
9
+ var appName = useReqraftProperty('appName');
10
+ var _b = useFetch({
14
11
  url: 'users/_current_/storage',
15
12
  cache: false,
16
13
  loadOnMount: true,
17
14
  }), data = _b.data, loading = _b.loading;
18
- var load = (0, useFetch_1.useFetch)({
15
+ var load = useFetch({
19
16
  url: 'users/_current_/',
20
17
  method: 'PUT',
21
18
  cache: false,
22
19
  }).load;
23
- var _c = (0, react_1.useState)(data), storage = _c[0], setStorage = _c[1];
24
- (0, react_1.useEffect)(function () {
20
+ var _c = useState(data), storage = _c[0], setStorage = _c[1];
21
+ useEffect(function () {
25
22
  if (data) {
26
23
  setStorage(data);
27
24
  }
28
- }, [data]);
25
+ }, [JSON.stringify(data)]);
29
26
  var getStorage = function (path, defaultValue, includeAppPrefix) {
30
27
  var _a;
31
28
  if (includeAppPrefix === void 0) { includeAppPrefix = true; }
32
29
  var _path = includeAppPrefix ? "".concat(appName, ".").concat(path) : path;
33
- return (_a = (0, lodash_1.get)(storage, _path)) !== null && _a !== void 0 ? _a : defaultValue;
30
+ return (_a = get(storage, _path)) !== null && _a !== void 0 ? _a : defaultValue;
34
31
  };
35
32
  var updateStorage = function (path, value, includeAppPrefix) {
36
33
  if (includeAppPrefix === void 0) { includeAppPrefix = true; }
37
34
  var _path = includeAppPrefix ? "".concat(appName, ".").concat(path) : path;
38
- var updatedStorage = (0, lodash_1.set)((0, lodash_1.cloneDeep)(storage), _path, value);
35
+ var updatedStorage = set(cloneDeep(storage), _path, value);
39
36
  setStorage(updatedStorage);
40
37
  load({ body: { storage: updatedStorage } });
41
38
  };
42
39
  var removeStorageValue = function (path, includeAppPrefix) {
43
40
  if (includeAppPrefix === void 0) { includeAppPrefix = true; }
44
41
  var _path = includeAppPrefix ? "".concat(appName, ".").concat(path) : path;
45
- var updatedStorage = (0, lodash_1.set)((0, lodash_1.cloneDeep)(storage), _path, null);
42
+ var updatedStorage = set(cloneDeep(storage), _path, null);
46
43
  setStorage(updatedStorage);
47
44
  load({ body: { storage_path: _path } });
48
45
  };
49
46
  if ((loading || !storage) && waitForStorage) {
50
47
  return null;
51
48
  }
52
- return ((0, jsx_runtime_1.jsx)(StorageContext_1.ReqraftStorageContext.Provider, { value: { storage: storage, getStorage: getStorage, updateStorage: updateStorage, removeStorageValue: removeStorageValue }, children: children }));
49
+ return (_jsx(ReqraftStorageContext.Provider, { value: { storage: storage, getStorage: getStorage, updateStorage: updateStorage, removeStorageValue: removeStorageValue }, children: children }));
53
50
  };
54
- exports.ReqraftStorageProvider = ReqraftStorageProvider;
55
51
  //# sourceMappingURL=StorageProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageProvider.js","sourceRoot":"","sources":["../../src/providers/StorageProvider.tsx"],"names":[],"mappings":";;;;AAAA,iCAA6C;AAC7C,+BAAuD;AAEvD,6DAAoF;AACpF,uDAAsD;AACtD,kEAAiE;AAQ1D,IAAM,sBAAsB,GAAG,UAAC,EAA0D;QAAxD,QAAQ,cAAA,EAAE,cAAc,oBAAA;IAC/D,IAAM,OAAO,GAAG,IAAA,uCAAkB,EAAC,SAAS,CAAC,CAAC;IAExC,IAAA,KAAoB,IAAA,mBAAQ,EAAC;QACjC,GAAG,EAAE,yBAAyB;QAC9B,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,IAAI;KAClB,CAAC,EAJM,IAAI,UAAA,EAAE,OAAO,aAInB,CAAC;IAEK,IAAA,IAAI,GAAK,IAAA,mBAAQ,EAAC;QACxB,GAAG,EAAE,kBAAkB;QACvB,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,KAAK;KACb,CAAC,KAJU,CAIT;IAEG,IAAA,KAAwB,IAAA,gBAAQ,EAAkB,IAAI,CAAC,EAAtD,OAAO,QAAA,EAAE,UAAU,QAAmC,CAAC;IAE9D,IAAA,iBAAS,EAAC;QACR,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,IAAM,UAAU,GAAG,UACjB,IAAY,EACZ,YAAe,EACf,gBAAgC;;QAAhC,iCAAA,EAAA,uBAAgC;QAEhC,IAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAG,OAAO,cAAI,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7D,OAAO,MAAA,IAAA,YAAG,EAAC,OAAO,EAAE,KAAK,CAAC,mCAAI,YAAY,CAAC;IAC7C,CAAC,CAAC;IAEF,IAAM,aAAa,GAAG,UACpB,IAAY,EACZ,KAAQ,EACR,gBAAgC;QAAhC,iCAAA,EAAA,uBAAgC;QAEhC,IAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAG,OAAO,cAAI,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,IAAM,cAAc,GAAG,IAAA,YAAG,EAAC,IAAA,kBAAS,EAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE7D,UAAU,CAAC,cAAc,CAAC,CAAC;QAE3B,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,IAAM,kBAAkB,GAAG,UAAU,IAAY,EAAE,gBAAgC;QAAhC,iCAAA,EAAA,uBAAgC;QACjF,IAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAG,OAAO,cAAI,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7D,IAAM,cAAc,GAAG,IAAA,YAAG,EAAC,IAAA,kBAAS,EAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAE5D,UAAU,CAAC,cAAc,CAAC,CAAC;QAE3B,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,uBAAC,sCAAqB,CAAC,QAAQ,IAC7B,KAAK,EAAE,EAAE,OAAO,SAAA,EAAE,UAAU,YAAA,EAAE,aAAa,eAAA,EAAE,kBAAkB,oBAAA,EAAE,YAEhE,QAAQ,GACsB,CAClC,CAAC;AACJ,CAAC,CAAC;AAnEW,QAAA,sBAAsB,0BAmEjC"}
1
+ {"version":3,"file":"StorageProvider.js","sourceRoot":"","sources":["../../src/providers/StorageProvider.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=Form.js.map
package/dist/types.js CHANGED
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=types.js.map
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
2
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
3
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -35,39 +34,36 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
35
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
35
  }
37
36
  };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.query = exports.setupFetch = exports.fetchConfig = void 0;
40
- var ReqraftProvider_1 = require("../providers/ReqraftProvider");
41
- exports.fetchConfig = {
37
+ import { ReqraftQueryClient } from '../providers/ReqraftProvider';
38
+ export var fetchConfig = {
42
39
  instance: window.location.origin + '/',
43
40
  instanceToken: '',
44
41
  unauthorizedRedirect: function (pathname) { return "/?next=".concat(pathname); },
45
42
  };
46
43
  var CACHE_EXPIRATION_TIME = 5 * 60 * 1000; // 5 minutes
47
- var setupFetch = function (_a) {
44
+ export var setupFetch = function (_a) {
48
45
  var instance = _a.instance, instanceToken = _a.instanceToken, unauthorizedRedirect = _a.unauthorizedRedirect;
49
- exports.fetchConfig.instance = instance;
50
- exports.fetchConfig.instanceToken = instanceToken;
46
+ fetchConfig.instance = instance;
47
+ fetchConfig.instanceToken = instanceToken;
51
48
  if (unauthorizedRedirect) {
52
- exports.fetchConfig.unauthorizedRedirect = unauthorizedRedirect;
49
+ fetchConfig.unauthorizedRedirect = unauthorizedRedirect;
53
50
  }
54
51
  };
55
- exports.setupFetch = setupFetch;
56
52
  function doFetchData(url_1) {
57
53
  return __awaiter(this, arguments, void 0, function (url, method, body) {
58
54
  if (method === void 0) { method = 'GET'; }
59
55
  return __generator(this, function (_a) {
60
- if (!exports.fetchConfig.instanceToken) {
56
+ if (!fetchConfig.instanceToken) {
61
57
  return [2 /*return*/, new Response(JSON.stringify({}), {
62
58
  status: 401,
63
59
  statusText: 'Unauthorized',
64
60
  })];
65
61
  }
66
- return [2 /*return*/, fetch("".concat(exports.fetchConfig.instance, "api/latest/").concat(url), {
62
+ return [2 /*return*/, fetch("".concat(fetchConfig.instance, "api/latest/").concat(url), {
67
63
  method: method,
68
64
  headers: {
69
65
  'Content-Type': 'application/json',
70
- Authorization: "Bearer ".concat(exports.fetchConfig.instanceToken),
66
+ Authorization: "Bearer ".concat(fetchConfig.instanceToken),
71
67
  },
72
68
  body: JSON.stringify(body),
73
69
  }).catch(function (error) {
@@ -79,11 +75,11 @@ function doFetchData(url_1) {
79
75
  });
80
76
  });
81
77
  }
82
- function query(_a) {
78
+ export function query(_a) {
83
79
  return __awaiter(this, arguments, void 0, function (_b) {
84
80
  var shouldCache, cacheKey, requestData;
85
81
  var _this = this;
86
- var url = _b.url, _c = _b.method, method = _c === void 0 ? 'GET' : _c, body = _b.body, _d = _b.cache, cache = _d === void 0 ? true : _d, _e = _b.queryClient, queryClient = _e === void 0 ? ReqraftProvider_1.ReqraftQueryClient : _e;
82
+ var url = _b.url, _c = _b.method, method = _c === void 0 ? 'GET' : _c, body = _b.body, _d = _b.cache, cache = _d === void 0 ? true : _d, _e = _b.queryClient, queryClient = _e === void 0 ? ReqraftQueryClient : _e;
87
83
  return __generator(this, function (_f) {
88
84
  switch (_f.label) {
89
85
  case 0:
@@ -103,7 +99,7 @@ function query(_a) {
103
99
  case 2:
104
100
  json = _a.sent();
105
101
  if (response.status === 401) {
106
- window.location.href = exports.fetchConfig.unauthorizedRedirect(window.location.pathname);
102
+ window.location.href = fetchConfig.unauthorizedRedirect(window.location.pathname);
107
103
  }
108
104
  return [2 /*return*/, {
109
105
  data: json,
@@ -136,5 +132,4 @@ function query(_a) {
136
132
  });
137
133
  });
138
134
  }
139
- exports.query = query;
140
135
  //# sourceMappingURL=fetch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qoretechnologies/reqraft",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "ReQraft is a collection of React components and hooks that are used across Qore Technologies' products made using the ReQore component library from Qore.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,165 @@
1
+ import { StoryObj } from '@storybook/react';
2
+ import { expect, fn, within } from '@storybook/test';
3
+ import { useState } from 'react';
4
+
5
+ import styled from 'styled-components';
6
+ import { longStringText, markdown } from '../../../../mock/fields';
7
+ import { StoryMeta } from '../../../types';
8
+ import { TFormFieldType } from '../../../types/Form';
9
+ import { FormField, IFormFieldProps } from './Field';
10
+
11
+ const meta = {
12
+ component: FormField,
13
+ title: 'Components/Form/Field',
14
+ args: {
15
+ onChange: fn(),
16
+ },
17
+ render(args) {
18
+ const [value, setValue] = useState<any>(args.value);
19
+ return <FormField {...args} value={value} onChange={setValue} />;
20
+ },
21
+ } as StoryMeta<typeof FormField>;
22
+
23
+ export default meta;
24
+ type Story = StoryObj<typeof meta>;
25
+
26
+ const DefaultStoryWrapper = styled.div`
27
+ display: grid;
28
+ gap: 32px;
29
+ width: 100%;
30
+ max-width: 850px;
31
+ margin: 0 auto;
32
+ `;
33
+ export const Default: Story = {
34
+ render() {
35
+ const [values, setValues] = useState({
36
+ name: 'Qore',
37
+ sendNotifications: true,
38
+ amount: 99,
39
+ color: { r: 255, g: 255, b: 255, a: 1 },
40
+ language: 'Java',
41
+ description: longStringText,
42
+ post: markdown,
43
+ cron: '* * * * *',
44
+ } as const);
45
+
46
+ const getFieldProps = <T extends TFormFieldType>(type: T, key: keyof typeof values) =>
47
+ ({
48
+ 'aria-label': type,
49
+ label: type,
50
+ type: type,
51
+ value: values[key],
52
+ onChange: (value) => {
53
+ setValues((values) => ({ ...values, [key]: value }));
54
+ },
55
+ labelProps: {
56
+ style: { textTransform: 'capitalize' },
57
+ },
58
+ }) as unknown as IFormFieldProps<T>;
59
+
60
+ return (
61
+ <DefaultStoryWrapper>
62
+ <FormField {...getFieldProps('string', 'name')} />
63
+ <FormField {...getFieldProps('boolean', 'sendNotifications')} />
64
+ <FormField {...getFieldProps('number', 'amount')} />
65
+ <FormField {...getFieldProps('color', 'color')} />
66
+ <FormField
67
+ {...getFieldProps('radio', 'language')}
68
+ fieldProps={{
69
+ items: [
70
+ { label: 'Qore', value: 'Qore', 'aria-label': 'Qore' },
71
+ { label: 'Java', value: 'Java', 'aria-label': 'Java' },
72
+ { label: 'Python', value: 'Python', 'aria-label': 'Python' },
73
+ ],
74
+ }}
75
+ />
76
+ <FormField {...getFieldProps('long-string', 'description')} />
77
+ <FormField {...getFieldProps('markdown', 'post')} />
78
+ <FormField
79
+ {...getFieldProps('cron', 'cron')}
80
+ fieldProps={{ wrapperProps: { 'aria-label': 'Cron' } }}
81
+ />
82
+ </DefaultStoryWrapper>
83
+ );
84
+ },
85
+ async play({ canvasElement }) {
86
+ const canvas = within(canvasElement);
87
+
88
+ await expect(canvas.getByLabelText('string')).toBeInTheDocument();
89
+ await expect(canvas.getByLabelText('boolean')).toBeInTheDocument();
90
+ await expect(canvas.getByLabelText('number')).toBeInTheDocument();
91
+ await expect(canvasElement.querySelector('.sketch-picker')).toBeInTheDocument();
92
+ await expect(canvas.getByLabelText('radio')).toBeInTheDocument();
93
+ await expect(canvas.getByLabelText('long-string')).toBeInTheDocument();
94
+ await expect(canvas.getByLabelText('markdown')).toBeInTheDocument();
95
+ await expect(canvas.getByLabelText('cron')).toBeInTheDocument();
96
+ },
97
+ };
98
+
99
+ export const String: Story = {
100
+ args: {
101
+ type: 'string',
102
+ value: 'Qore',
103
+ label: 'Label',
104
+ },
105
+ };
106
+
107
+ export const Boolean: Story = {
108
+ args: {
109
+ type: 'boolean',
110
+ value: true,
111
+ label: 'Boolean',
112
+ },
113
+ };
114
+
115
+ export const Number: Story = {
116
+ args: {
117
+ type: 'number',
118
+ value: 99,
119
+ label: 'Number',
120
+ },
121
+ };
122
+
123
+ export const Color: Story = {
124
+ args: {
125
+ type: 'color',
126
+ value: { r: 0, g: 0, b: 0, a: 1 },
127
+ label: 'Color',
128
+ },
129
+ };
130
+
131
+ export const Radio: Story = {
132
+ args: {
133
+ type: 'radio',
134
+ value: 'Qore',
135
+ items: [
136
+ { label: 'Qore', value: 'Qore', 'aria-label': 'Qore' },
137
+ { label: 'Java', value: 'Java', 'aria-label': 'Java' },
138
+ { label: 'Python', value: 'Python', 'aria-label': 'Python' },
139
+ ],
140
+ label: 'Radio',
141
+ },
142
+ };
143
+
144
+ export const LongString: Story = {
145
+ args: {
146
+ type: 'long-string',
147
+ value: longStringText,
148
+ label: 'Long String',
149
+ },
150
+ };
151
+
152
+ export const Markdown: Story = {
153
+ args: {
154
+ type: 'markdown',
155
+ value: markdown,
156
+ label: 'Markdown',
157
+ },
158
+ };
159
+ export const Cron: Story = {
160
+ args: {
161
+ type: 'cron',
162
+ value: '* * * * *',
163
+ label: 'Cron',
164
+ },
165
+ };
@@ -0,0 +1,172 @@
1
+ import { IReqoreLabelProps, ReqoreControlGroup, ReqoreLabel } from '@qoretechnologies/reqore';
2
+ import { useId } from 'react';
3
+ import { TFormFieldType, TFormFieldValueType } from '../../../types/Form';
4
+ import BooleanFormField, { IBooleanFormFieldProps } from './boolean/Boolean';
5
+ import ColorFormField, { IColorFormFieldProps } from './color/Color';
6
+ import CronFormField, { ICronFormFieldProps } from './cron/Cron';
7
+ import LongStringFormField, { ILongStringFormFieldProps } from './long-string/LongString';
8
+ import MarkdownFormField, { IMarkdownFormFieldProps } from './markdown/Markdown';
9
+ import NumberFormField from './number/Number';
10
+ import RadioGroupFormField, { IRadioGroupFormFieldProps } from './radio-group/RadioGroup';
11
+ import { IStringFormFieldProps, StringFormField } from './string/String';
12
+
13
+ export interface IFormFieldProps<T extends TFormFieldType = TFormFieldType> {
14
+ type?: T;
15
+ value: TFormFieldValueType<T>;
16
+ onChange: (value: TFormFieldValueType<T>, event?: unknown) => void;
17
+
18
+ validateSelf?: boolean;
19
+ onValidateChange?: (isValid: boolean) => void;
20
+
21
+ fieldProps?: Omit<
22
+ T extends 'string' ? IStringFormFieldProps
23
+ : T extends 'boolean' ? IBooleanFormFieldProps
24
+ : T extends 'radio' ? IRadioGroupFormFieldProps
25
+ : T extends 'color' ? IColorFormFieldProps
26
+ : T extends 'long-string' ? ILongStringFormFieldProps
27
+ : T extends 'markdown' ? IMarkdownFormFieldProps
28
+ : T extends 'cron' ? ICronFormFieldProps
29
+ : never,
30
+ 'value' | 'onChange'
31
+ >;
32
+
33
+ label?: IReqoreLabelProps['label'];
34
+ labelPosition?: 'top' | 'left' | 'right' | 'bottom';
35
+ }
36
+ export const FormField = <T extends TFormFieldType>({
37
+ type,
38
+ onChange,
39
+ value,
40
+ fieldProps,
41
+ label,
42
+ labelPosition = 'top',
43
+ ...rest
44
+ }: IFormFieldProps<T>) => {
45
+ const id = useId();
46
+
47
+ const handleChange = (value: TFormFieldValueType<T>, event?: unknown) => {
48
+ onChange(value, event);
49
+ };
50
+
51
+ const renderField = (type: T) => {
52
+ switch (type) {
53
+ case 'string':
54
+ return (
55
+ <StringFormField
56
+ {...rest}
57
+ {...(fieldProps as IFormFieldProps<'string'>['fieldProps'])}
58
+ onChange={(value: string) => handleChange(value as TFormFieldValueType<T>)}
59
+ value={value as TFormFieldValueType<T>}
60
+ id={id}
61
+ />
62
+ );
63
+
64
+ case 'boolean':
65
+ return (
66
+ <BooleanFormField
67
+ {...rest}
68
+ {...(fieldProps as IFormFieldProps<'boolean'>['fieldProps'])}
69
+ checked={value as boolean}
70
+ onChange={(checked) => {
71
+ handleChange(checked as TFormFieldValueType<T>);
72
+ }}
73
+ id={id}
74
+ />
75
+ );
76
+
77
+ case 'number':
78
+ return (
79
+ <NumberFormField
80
+ {...rest}
81
+ {...(fieldProps as IFormFieldProps<'number'>['fieldProps'])}
82
+ value={value as number}
83
+ onChange={(value) => {
84
+ handleChange(value as TFormFieldValueType<T>);
85
+ }}
86
+ id={id}
87
+ />
88
+ );
89
+
90
+ case 'color':
91
+ return (
92
+ <ColorFormField
93
+ {...rest}
94
+ {...(fieldProps as IFormFieldProps<'color'>['fieldProps'])}
95
+ value={value as IColorFormFieldProps['color']}
96
+ onChange={(color) => {
97
+ handleChange(color as TFormFieldValueType<T>);
98
+ }}
99
+ />
100
+ );
101
+
102
+ case 'radio':
103
+ return (
104
+ <RadioGroupFormField
105
+ {...rest}
106
+ {...(fieldProps as IFormFieldProps<'radio'>['fieldProps'])}
107
+ value={value as TFormFieldValueType<T>}
108
+ onChange={(selected) => {
109
+ handleChange(selected as TFormFieldValueType<T>);
110
+ }}
111
+ id={id}
112
+ />
113
+ );
114
+
115
+ case 'long-string':
116
+ return (
117
+ <LongStringFormField
118
+ {...rest}
119
+ {...(fieldProps as IFormFieldProps<'long-string'>['fieldProps'])}
120
+ value={value as TFormFieldValueType<T>}
121
+ onChange={(selected) => {
122
+ handleChange(selected as TFormFieldValueType<T>);
123
+ }}
124
+ id={id}
125
+ />
126
+ );
127
+
128
+ case 'markdown':
129
+ return (
130
+ <MarkdownFormField
131
+ {...rest}
132
+ {...(fieldProps as IFormFieldProps<'markdown'>['fieldProps'])}
133
+ value={value as TFormFieldValueType<T>}
134
+ onChange={(selected) => {
135
+ handleChange(selected as TFormFieldValueType<T>);
136
+ }}
137
+ id={id}
138
+ />
139
+ );
140
+
141
+ case 'cron':
142
+ return (
143
+ <CronFormField
144
+ {...rest}
145
+ {...(fieldProps as IFormFieldProps<'cron'>['fieldProps'])}
146
+ value={value as TFormFieldValueType<T>}
147
+ onChange={(selected) => {
148
+ handleChange(selected as TFormFieldValueType<T>);
149
+ }}
150
+ // give id to first element to make htmlFor works.
151
+ inputProps={[{ id }]}
152
+ />
153
+ );
154
+ default:
155
+ return null;
156
+ }
157
+ };
158
+
159
+ return (
160
+ <ReqoreControlGroup vertical={labelPosition === 'bottom' || labelPosition === 'top'}>
161
+ {(label || label === 0) && (labelPosition === 'top' || labelPosition === 'left') ?
162
+ <ReqoreLabel htmlFor={id} label={label} fluid />
163
+ : null}
164
+
165
+ {renderField(type)}
166
+
167
+ {(label || label === 0) && (labelPosition === 'bottom' || labelPosition === 'right') ?
168
+ <ReqoreLabel htmlFor={id} label={label} fluid />
169
+ : null}
170
+ </ReqoreControlGroup>
171
+ );
172
+ };
@@ -0,0 +1,46 @@
1
+ import { StoryObj } from '@storybook/react';
2
+ import { expect, fn, userEvent, within } from '@storybook/test';
3
+ import { useState } from 'react';
4
+
5
+ import { StoryMeta } from '../../../../types';
6
+ import { BooleanFormField } from './Boolean';
7
+
8
+ const meta = {
9
+ component: BooleanFormField,
10
+ title: 'Components/Form/Boolean',
11
+ args: {
12
+ onChange: fn(),
13
+ },
14
+ render(args) {
15
+ const [checked, setChecked] = useState(args.checked);
16
+ return (
17
+ <BooleanFormField
18
+ {...args}
19
+ checked={checked}
20
+ onChange={(checked) => {
21
+ args.onChange?.(checked);
22
+ setChecked(checked);
23
+ }}
24
+ />
25
+ );
26
+ },
27
+ } as StoryMeta<typeof BooleanFormField>;
28
+
29
+ export default meta;
30
+ type Story = StoryObj<typeof meta>;
31
+
32
+ export const Default: Story = {
33
+ args: {
34
+ checked: true,
35
+ 'aria-label': 'Boolean',
36
+ },
37
+ async play({ canvasElement, args }) {
38
+ const canvas = within(canvasElement);
39
+
40
+ await expect(canvas.getByText('Yes')).toBeInTheDocument();
41
+ await expect(canvas.getByText('No')).toBeInTheDocument();
42
+
43
+ await userEvent.click(canvas.getByLabelText('Boolean'));
44
+ await expect(args.onChange).toHaveBeenLastCalledWith(false);
45
+ },
46
+ };
@@ -0,0 +1,34 @@
1
+ import { ReqoreCheckbox } from '@qoretechnologies/reqore';
2
+ import { IReqoreCheckboxProps } from '@qoretechnologies/reqore/dist/components/Checkbox';
3
+
4
+ export interface IBooleanFormFieldProps extends Omit<IReqoreCheckboxProps, 'onChange'> {
5
+ onChange?(checked: boolean): void;
6
+ }
7
+
8
+ export const BooleanFormField = ({
9
+ checked,
10
+ onChange,
11
+ onClick,
12
+ ...rest
13
+ }: IBooleanFormFieldProps) => {
14
+ const toggle: IReqoreCheckboxProps['onClick'] = (event) => {
15
+ onChange(!checked);
16
+ onClick?.(event);
17
+ };
18
+
19
+ return (
20
+ <ReqoreCheckbox
21
+ checked={checked ?? false}
22
+ onClick={toggle}
23
+ asSwitch
24
+ onText='Yes'
25
+ offText='No'
26
+ checkedIcon='CheckLine'
27
+ uncheckedIcon='CloseLine'
28
+ margin='none'
29
+ {...rest}
30
+ />
31
+ );
32
+ };
33
+
34
+ export default BooleanFormField;