@antscorp/antsomi-ui 1.3.5-beta.987 → 1.3.5-beta.988
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/es/components/molecules/CodeStructure/CodeStructure.d.ts +8 -0
- package/es/components/molecules/CodeStructure/CodeStructure.js +111 -0
- package/es/components/molecules/CodeStructure/constants.d.ts +21 -0
- package/es/components/molecules/CodeStructure/constants.js +60 -0
- package/es/components/molecules/CodeStructure/styled.d.ts +1 -0
- package/es/components/molecules/CodeStructure/styled.js +2 -0
- package/es/components/molecules/CodeStructure/type.d.ts +43 -0
- package/es/components/molecules/CodeStructure/type.js +35 -0
- package/es/components/molecules/CodeStructure/utils.d.ts +4 -0
- package/es/components/molecules/CodeStructure/utils.js +63 -0
- package/package.json +2 -2
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { CodeStructureData } from './type';
|
|
3
|
+
interface CodeStructureProps {
|
|
4
|
+
initialData: CodeStructureData;
|
|
5
|
+
onChange: (data: CodeStructureData) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const CodeStructure: React.FC<CodeStructureProps>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Libraries
|
|
3
|
+
import { useCallback, useEffect } from 'react';
|
|
4
|
+
import { Form, InputNumber, Radio, Select, Typography, Flex, Input, Row, Col } from 'antd';
|
|
5
|
+
import { useImmer } from 'use-immer';
|
|
6
|
+
import { translate, translations } from '@antscorp/antsomi-locales';
|
|
7
|
+
// Utils
|
|
8
|
+
import { calculateTotalCodes, generateCodeWithPrefixAndSuffix, generateRandomCodeWithConfig, } from './utils';
|
|
9
|
+
// Types
|
|
10
|
+
import { RefillUnitType } from './type';
|
|
11
|
+
// Constants
|
|
12
|
+
import { CAPITALIZATION_OPTIONS, CHARACTER_ORDER_OPTIONS, CHARACTER_TYPE_OPTIONS, REFILL_UNIT_OPTIONS, SEPARATOR_OPTIONS, } from './constants';
|
|
13
|
+
import { CodeStructureWrapper } from './styled';
|
|
14
|
+
const { Title } = Typography;
|
|
15
|
+
export const CodeStructure = ({ initialData, onChange }) => {
|
|
16
|
+
const [form] = Form.useForm();
|
|
17
|
+
const [state, setState] = useImmer({
|
|
18
|
+
codeSample: '',
|
|
19
|
+
maxCodes: 0,
|
|
20
|
+
refillThreshold: 1,
|
|
21
|
+
refillInterval: 'auto',
|
|
22
|
+
refillUnit: 'codes',
|
|
23
|
+
codeWithPrefixAndSuffix: '',
|
|
24
|
+
});
|
|
25
|
+
const { codeSample, maxCodes, refillThreshold, refillUnit } = state;
|
|
26
|
+
const setCodeSample = (value) => {
|
|
27
|
+
setState(draft => {
|
|
28
|
+
draft.codeSample = value;
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
const setMaxCodes = (value) => {
|
|
32
|
+
setState(draft => {
|
|
33
|
+
draft.maxCodes = value;
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
/** *********** ✨ Codeium Command ⭐ ************ */
|
|
37
|
+
/**
|
|
38
|
+
* Update the code sample with prefix and suffix
|
|
39
|
+
* @param {string} value The new value of code sample with prefix and suffix
|
|
40
|
+
*/
|
|
41
|
+
/** **** 99b15217-c7a7-4093-8b8f-ea4b4271af48 ****** */
|
|
42
|
+
const setCodeWithPrefixAndSuffix = (value) => {
|
|
43
|
+
setState(draft => {
|
|
44
|
+
draft.codeWithPrefixAndSuffix = value;
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
const setRefillThreshold = useCallback((value) => {
|
|
48
|
+
setState(draft => {
|
|
49
|
+
draft.refillThreshold = value;
|
|
50
|
+
});
|
|
51
|
+
}, [setState]);
|
|
52
|
+
const setRefillUnit = useCallback((value) => {
|
|
53
|
+
setState(draft => {
|
|
54
|
+
draft.refillUnit = value;
|
|
55
|
+
});
|
|
56
|
+
}, [setState]);
|
|
57
|
+
const updateFormValues = (data) => {
|
|
58
|
+
const allValues = form.getFieldsValue();
|
|
59
|
+
form.setFieldsValue(allValues);
|
|
60
|
+
const dataOnChange = {
|
|
61
|
+
...allValues,
|
|
62
|
+
...(allValues.refillInterval === 'auto' ? { refillThreshold, refillUnit } : {}),
|
|
63
|
+
};
|
|
64
|
+
onChange(dataOnChange);
|
|
65
|
+
const isRelevantChangeCodeKey = Object.keys(data).some(key => key !== 'quantity' &&
|
|
66
|
+
key !== 'suffix' &&
|
|
67
|
+
key !== 'prefix' &&
|
|
68
|
+
key !== 'refillInterval' &&
|
|
69
|
+
key !== 'separator');
|
|
70
|
+
const isChangePrefix = Object.keys(data).some(key => key === 'suffix' || key === 'prefix' || key === 'separator');
|
|
71
|
+
if (isRelevantChangeCodeKey) {
|
|
72
|
+
setCodeSample(generateRandomCodeWithConfig(form.getFieldsValue()));
|
|
73
|
+
}
|
|
74
|
+
if (isChangePrefix) {
|
|
75
|
+
setCodeWithPrefixAndSuffix(generateCodeWithPrefixAndSuffix(codeSample, form.getFieldValue('prefix'), form.getFieldValue('suffix'), form.getFieldValue('separator')));
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const computeTotalCodes = useCallback(() => {
|
|
79
|
+
const numLetters = form.getFieldValue('alphabetLetters');
|
|
80
|
+
const numDigits = form.getFieldValue('digitalNumbers');
|
|
81
|
+
const type = form.getFieldValue('characterType');
|
|
82
|
+
if (numLetters && numDigits && type) {
|
|
83
|
+
const total = calculateTotalCodes(numLetters, numDigits, type);
|
|
84
|
+
setMaxCodes(total);
|
|
85
|
+
}
|
|
86
|
+
}, [form]);
|
|
87
|
+
// Effects
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
setRefillThreshold(initialData.refillThreshold || 1);
|
|
90
|
+
}, [initialData.refillThreshold, setRefillThreshold]);
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
setRefillUnit(initialData.refillUnit || RefillUnitType.CODES);
|
|
93
|
+
}, [initialData.refillUnit, setRefillUnit]);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
computeTotalCodes();
|
|
96
|
+
}, [
|
|
97
|
+
form.getFieldValue('alphabetLetters'),
|
|
98
|
+
form.getFieldValue('digitalNumbers'),
|
|
99
|
+
form.getFieldValue('characterType'),
|
|
100
|
+
]);
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
setCodeSample(generateRandomCodeWithConfig(form.getFieldsValue()));
|
|
103
|
+
setMaxCodes(calculateTotalCodes(form.getFieldValue('alphabetLetters'), form.getFieldValue('digitalNumbers'), form.getFieldValue('characterType')));
|
|
104
|
+
}, []);
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
form.setFieldsValue(initialData);
|
|
107
|
+
}, [initialData, form]);
|
|
108
|
+
return (_jsx(CodeStructureWrapper, { children: _jsxs(Form, { form: form, layout: "horizontal", labelCol: { span: 8 }, colon: false, wrapperCol: { span: 16 }, labelAlign: "left", initialValues: initialData, onValuesChange: updateFormValues, children: [_jsx(Title, { level: 2, children: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE, 'Code Structure') }), _jsx(Form.Item, { label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_PREFIX, 'Prefix'), name: "prefix", children: _jsx(Input, { placeholder: "" }) }), _jsxs(Row, { children: [_jsx(Col, { span: 8, offset: 0, children: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_INFIX, 'Infix') }), _jsx(Col, { span: 16, offset: 0, children: _jsxs(Flex, { vertical: true, gap: 10, children: [_jsx(Row, { children: _jsx(Col, { offset: 0, children: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_TYPE, 'Character Type') }) }), _jsx(Form.Item, { name: "characterType", children: _jsx(Radio.Group, { options: CHARACTER_TYPE_OPTIONS }) })] }) })] }), _jsx(Row, { children: _jsx(Col, { offset: 8, children: _jsxs(Flex, { gap: 10, align: "center", children: [_jsx(Form.Item, { name: "digitalNumbers", children: _jsx(InputNumber, { min: 1, max: 50, style: { width: '40px' } }) }), _jsx("div", { style: { marginBottom: '15px' }, children: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_TYPE_DIG_NO, 'digital numbers') })] }) }) }), _jsx(Row, { children: _jsx(Col, { offset: 8, children: _jsxs(Flex, { gap: 10, align: "center", children: [_jsx(Form.Item, { name: "alphabetLetters", children: _jsx(InputNumber, { min: 1, max: 50, style: { width: '40px' } }) }), _jsx("div", { style: { marginBottom: '15px' }, children: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_TYPE_LET_NO, 'alphabet letters') })] }) }) }), _jsxs(Flex, { vertical: true, gap: 10, children: [_jsx(Row, { children: _jsx(Col, { offset: 8, children: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CAP, 'Letters Capitalization') }) }), _jsx(Form.Item, { label: _jsx("span", { children: "\u00A0" }), name: "capitalization", children: _jsx(Radio.Group, { options: CAPITALIZATION_OPTIONS }) })] }), _jsxs(Flex, { vertical: true, gap: 10, children: [_jsx(Row, { children: _jsx(Col, { offset: 8, children: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_ORDER, 'Character Order') }) }), _jsx(Form.Item, { label: _jsx("span", { children: "\u00A0" }), name: "characterOrder", children: _jsx(Radio.Group, { options: CHARACTER_ORDER_OPTIONS }) })] }), _jsx(Form.Item, { label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_SUFFIX, 'Suffix'), name: "suffix", children: _jsx(Input, { placeholder: "" }) }), _jsx(Form.Item, { label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_SEPARATOR, 'Separator'), name: "separator", children: _jsx(Select, { options: SEPARATOR_OPTIONS, style: { width: '50%' } }) }), _jsxs(Row, { children: [_jsx(Col, { span: 8, children: _jsxs(Flex, { justify: "start", align: "center", gap: 5, children: [translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_QUANTITY, 'Quantity'), ' ', _jsx("span", { style: { color: 'red' }, children: "*" })] }) }), _jsx(Col, { children: _jsxs(Flex, { gap: 10, align: "center", children: [_jsx(Form.Item, { name: "quantity", children: _jsx(InputNumber, { min: 1, max: 10000 }) }), _jsx("div", { style: { marginBottom: '15px' }, children: "code(s) per time" })] }) })] }), _jsxs(Form.Item, { label: translate(translations._ACT_PREVIEW, 'Preview'), children: ["Maximum of ", _jsx("b", { children: maxCodes.toLocaleString() }), " codes (sample", ' ', generateCodeWithPrefixAndSuffix(codeSample, form.getFieldValue('prefix'), form.getFieldValue('suffix'), form.getFieldValue('separator')), ") to be generated"] }), _jsx(Title, { level: 4, children: "Code Refill" }), _jsx(Form.Item, { label: "Refill Interval", name: "refillInterval", children: _jsxs(Radio.Group, { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, onChange: e => {
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
}, children: [_jsx(Radio, { value: "manual", children: "Manual refill only" }), _jsx(Radio, { value: "auto", children: _jsxs(Flex, { gap: 10, align: "center", children: [_jsx(Typography.Text, { style: { whiteSpace: 'nowrap' }, children: "Add codes when less than" }), _jsx(InputNumber, { min: 1, max: 10000, style: { width: '63px' }, value: refillThreshold, onChange: value => setRefillThreshold(value || 1) }), _jsx(Select, { onClick: e => e.preventDefault(), value: refillUnit, onChange: setRefillUnit, options: REFILL_UNIT_OPTIONS, style: { width: '63px' } }), "remaining"] }) })] }) })] }) }));
|
|
111
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CapitalizationType, CharacterOrderType, CharacterType, RefillUnitType, SeparatorType } from './type';
|
|
2
|
+
export declare const SEPARATOR_OPTIONS: {
|
|
3
|
+
value: SeparatorType;
|
|
4
|
+
label: string;
|
|
5
|
+
}[];
|
|
6
|
+
export declare const CHARACTER_TYPE_OPTIONS: {
|
|
7
|
+
value: CharacterType;
|
|
8
|
+
label: string;
|
|
9
|
+
}[];
|
|
10
|
+
export declare const CAPITALIZATION_OPTIONS: {
|
|
11
|
+
value: CapitalizationType;
|
|
12
|
+
label: string;
|
|
13
|
+
}[];
|
|
14
|
+
export declare const CHARACTER_ORDER_OPTIONS: {
|
|
15
|
+
value: CharacterOrderType;
|
|
16
|
+
label: string;
|
|
17
|
+
}[];
|
|
18
|
+
export declare const REFILL_UNIT_OPTIONS: {
|
|
19
|
+
value: RefillUnitType;
|
|
20
|
+
label: string;
|
|
21
|
+
}[];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { CapitalizationType, CharacterOrderType, CharacterType, RefillUnitType, SeparatorType, } from './type';
|
|
2
|
+
import { translate, translations } from '@antscorp/antsomi-locales';
|
|
3
|
+
export const SEPARATOR_OPTIONS = [
|
|
4
|
+
{ value: SeparatorType.HYPHEN, label: 'Hyphen (-)' },
|
|
5
|
+
{ value: SeparatorType.UNDERSCORE, label: 'Underscore (_)' },
|
|
6
|
+
{ value: SeparatorType.NONE, label: 'None' },
|
|
7
|
+
{ value: SeparatorType.DOT, label: 'Dot (.)' },
|
|
8
|
+
];
|
|
9
|
+
export const CHARACTER_TYPE_OPTIONS = [
|
|
10
|
+
{
|
|
11
|
+
value: CharacterType.DIGITS,
|
|
12
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_TYPE_DIG, 'Digits only'),
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
value: CharacterType.LETTERS,
|
|
16
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_TYPE_LET, 'Letters only'),
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
value: CharacterType.DIGIT_AND_LETTERS,
|
|
20
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_TYPE_BOTH, 'Digit & letters'),
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
export const CAPITALIZATION_OPTIONS = [
|
|
24
|
+
{
|
|
25
|
+
value: CapitalizationType.UPPERCASE,
|
|
26
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CAP_UP, 'Uppercase'),
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
value: CapitalizationType.LOWERCASE,
|
|
30
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CAP_LOW, 'lowercase'),
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
value: CapitalizationType.TITLE_CASE,
|
|
34
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CAP_TITL, 'Title case'),
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
export const CHARACTER_ORDER_OPTIONS = [
|
|
38
|
+
{
|
|
39
|
+
value: CharacterOrderType.RANDOM,
|
|
40
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_ORDER_RANDOM, 'Random'),
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
value: CharacterOrderType.LETTER_FIRST,
|
|
44
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_ORDER_LET, 'Letter first'),
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
value: CharacterOrderType.NUMBER_FIRST,
|
|
48
|
+
label: translate(translations._POOL_RULE_SETTING_CODE_STRUCTURE_CHAC_ORDER_NO, 'Number first'),
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
export const REFILL_UNIT_OPTIONS = [
|
|
52
|
+
{
|
|
53
|
+
value: RefillUnitType.CODES,
|
|
54
|
+
label: 'codes',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
value: RefillUnitType.PERCENT,
|
|
58
|
+
label: '%',
|
|
59
|
+
},
|
|
60
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CodeStructureWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare enum CharacterType {
|
|
2
|
+
DIGITS = "digits",
|
|
3
|
+
LETTERS = "letters",
|
|
4
|
+
DIGIT_AND_LETTERS = "digitAndLetters"
|
|
5
|
+
}
|
|
6
|
+
export declare enum CharacterOrderType {
|
|
7
|
+
RANDOM = "random",
|
|
8
|
+
LETTER_FIRST = "letterFirst",
|
|
9
|
+
NUMBER_FIRST = "numberFirst"
|
|
10
|
+
}
|
|
11
|
+
export declare enum CapitalizationType {
|
|
12
|
+
UPPERCASE = "uppercase",
|
|
13
|
+
LOWERCASE = "lowercase",
|
|
14
|
+
TITLE_CASE = "titlecase"
|
|
15
|
+
}
|
|
16
|
+
export declare enum SeparatorType {
|
|
17
|
+
HYPHEN = "hyphen",
|
|
18
|
+
UNDERSCORE = "underscore",
|
|
19
|
+
DOT = "dot",
|
|
20
|
+
NONE = "none"
|
|
21
|
+
}
|
|
22
|
+
export declare enum RefillType {
|
|
23
|
+
AUTO = "auto",
|
|
24
|
+
MANUAL = "manual"
|
|
25
|
+
}
|
|
26
|
+
export declare enum RefillUnitType {
|
|
27
|
+
CODES = "codes",
|
|
28
|
+
PERCENT = "percent"
|
|
29
|
+
}
|
|
30
|
+
export interface CodeStructureData {
|
|
31
|
+
characterType: CharacterType;
|
|
32
|
+
digitalNumbers: number;
|
|
33
|
+
alphabetLetters: number;
|
|
34
|
+
capitalization: CapitalizationType;
|
|
35
|
+
characterOrder: CharacterOrderType;
|
|
36
|
+
separator: SeparatorType;
|
|
37
|
+
quantity: number;
|
|
38
|
+
suffix: string;
|
|
39
|
+
refillInterval: RefillType;
|
|
40
|
+
prefix: string;
|
|
41
|
+
refillThreshold?: number;
|
|
42
|
+
refillUnit?: RefillUnitType;
|
|
43
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export var CharacterType;
|
|
2
|
+
(function (CharacterType) {
|
|
3
|
+
CharacterType["DIGITS"] = "digits";
|
|
4
|
+
CharacterType["LETTERS"] = "letters";
|
|
5
|
+
CharacterType["DIGIT_AND_LETTERS"] = "digitAndLetters";
|
|
6
|
+
})(CharacterType || (CharacterType = {}));
|
|
7
|
+
export var CharacterOrderType;
|
|
8
|
+
(function (CharacterOrderType) {
|
|
9
|
+
CharacterOrderType["RANDOM"] = "random";
|
|
10
|
+
CharacterOrderType["LETTER_FIRST"] = "letterFirst";
|
|
11
|
+
CharacterOrderType["NUMBER_FIRST"] = "numberFirst";
|
|
12
|
+
})(CharacterOrderType || (CharacterOrderType = {}));
|
|
13
|
+
export var CapitalizationType;
|
|
14
|
+
(function (CapitalizationType) {
|
|
15
|
+
CapitalizationType["UPPERCASE"] = "uppercase";
|
|
16
|
+
CapitalizationType["LOWERCASE"] = "lowercase";
|
|
17
|
+
CapitalizationType["TITLE_CASE"] = "titlecase";
|
|
18
|
+
})(CapitalizationType || (CapitalizationType = {}));
|
|
19
|
+
export var SeparatorType;
|
|
20
|
+
(function (SeparatorType) {
|
|
21
|
+
SeparatorType["HYPHEN"] = "hyphen";
|
|
22
|
+
SeparatorType["UNDERSCORE"] = "underscore";
|
|
23
|
+
SeparatorType["DOT"] = "dot";
|
|
24
|
+
SeparatorType["NONE"] = "none";
|
|
25
|
+
})(SeparatorType || (SeparatorType = {}));
|
|
26
|
+
export var RefillType;
|
|
27
|
+
(function (RefillType) {
|
|
28
|
+
RefillType["AUTO"] = "auto";
|
|
29
|
+
RefillType["MANUAL"] = "manual";
|
|
30
|
+
})(RefillType || (RefillType = {}));
|
|
31
|
+
export var RefillUnitType;
|
|
32
|
+
(function (RefillUnitType) {
|
|
33
|
+
RefillUnitType["CODES"] = "codes";
|
|
34
|
+
RefillUnitType["PERCENT"] = "percent";
|
|
35
|
+
})(RefillUnitType || (RefillUnitType = {}));
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CharacterType, CodeStructureData, SeparatorType } from './type';
|
|
2
|
+
export declare const generateRandomCodeWithConfig: ({ characterType, digitalNumbers, alphabetLetters, capitalization, characterOrder, }: CodeStructureData) => string;
|
|
3
|
+
export declare const generateCodeWithPrefixAndSuffix: (code: string, prefix: string, suffix: string, separator: SeparatorType) => string;
|
|
4
|
+
export declare const calculateTotalCodes: (numberOfLetters: number, numberOfDigits: number, characterType: CharacterType) => number;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { CapitalizationType, CharacterOrderType, CharacterType, SeparatorType, } from './type';
|
|
2
|
+
export const generateRandomCodeWithConfig = ({ characterType, digitalNumbers, alphabetLetters, capitalization, characterOrder, }) => {
|
|
3
|
+
const digits = '0123456789';
|
|
4
|
+
const letters = 'abcdefghijklmnopqrstuvwxyz';
|
|
5
|
+
let numPart = '';
|
|
6
|
+
let letterPart = '';
|
|
7
|
+
if (characterType === CharacterType.DIGITS || characterType === CharacterType.DIGIT_AND_LETTERS) {
|
|
8
|
+
numPart = Array.from({ length: digitalNumbers }, () => digits[Math.floor(Math.random() * digits.length)]).join('');
|
|
9
|
+
}
|
|
10
|
+
if (characterType === CharacterType.LETTERS ||
|
|
11
|
+
characterType === CharacterType.DIGIT_AND_LETTERS) {
|
|
12
|
+
letterPart = Array.from({ length: alphabetLetters }, () => letters[Math.floor(Math.random() * letters.length)]).join('');
|
|
13
|
+
}
|
|
14
|
+
// Apply capitalization
|
|
15
|
+
if (capitalization === CapitalizationType.UPPERCASE) {
|
|
16
|
+
letterPart = letterPart.toUpperCase();
|
|
17
|
+
}
|
|
18
|
+
else if (capitalization === CapitalizationType.LOWERCASE) {
|
|
19
|
+
letterPart = letterPart.toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
else if (capitalization === CapitalizationType.TITLE_CASE && letterPart.length > 0) {
|
|
22
|
+
letterPart = letterPart.charAt(0).toUpperCase() + letterPart.slice(1).toLowerCase();
|
|
23
|
+
}
|
|
24
|
+
// Order characters
|
|
25
|
+
let finalCode = '';
|
|
26
|
+
if (characterOrder === CharacterOrderType.RANDOM) {
|
|
27
|
+
finalCode = (numPart + letterPart)
|
|
28
|
+
.split('')
|
|
29
|
+
.sort(() => Math.random() - 0.5)
|
|
30
|
+
.join('');
|
|
31
|
+
}
|
|
32
|
+
else if (characterOrder === CharacterOrderType.LETTER_FIRST) {
|
|
33
|
+
finalCode = letterPart + numPart;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
finalCode = numPart + letterPart;
|
|
37
|
+
}
|
|
38
|
+
return finalCode;
|
|
39
|
+
};
|
|
40
|
+
export const generateCodeWithPrefixAndSuffix = (code, prefix, suffix, separator) => {
|
|
41
|
+
let finalCode = code;
|
|
42
|
+
// Apply prefix and suffix
|
|
43
|
+
if (prefix)
|
|
44
|
+
finalCode = `${prefix}${separator !== SeparatorType.NONE ? (separator === SeparatorType.HYPHEN ? '-' : separator === SeparatorType.DOT ? '.' : '_') : ''}${finalCode}`;
|
|
45
|
+
if (suffix)
|
|
46
|
+
finalCode = `${finalCode}${separator !== SeparatorType.NONE ? (separator === SeparatorType.HYPHEN ? '-' : separator === SeparatorType.DOT ? '.' : '_') : ''}${suffix}`;
|
|
47
|
+
return finalCode;
|
|
48
|
+
};
|
|
49
|
+
export const calculateTotalCodes = (numberOfLetters, numberOfDigits, characterType) => {
|
|
50
|
+
let totalCodes = 0;
|
|
51
|
+
switch (characterType) {
|
|
52
|
+
case CharacterType.LETTERS:
|
|
53
|
+
case CharacterType.DIGITS:
|
|
54
|
+
totalCodes = 26 ** numberOfLetters * 10 ** numberOfDigits;
|
|
55
|
+
break;
|
|
56
|
+
case CharacterType.DIGIT_AND_LETTERS:
|
|
57
|
+
totalCodes = 26 * 26 ** (numberOfLetters - 1) * 10 ** numberOfDigits;
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
throw new Error('Invalid character type');
|
|
61
|
+
}
|
|
62
|
+
return totalCodes;
|
|
63
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antscorp/antsomi-ui",
|
|
3
|
-
"version": "1.3.5-beta.
|
|
3
|
+
"version": "1.3.5-beta.988",
|
|
4
4
|
"description": "An enterprise-class UI design language and React UI library.",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"dist/*",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"not op_mini all"
|
|
62
62
|
],
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@antscorp/antsomi-locales": "1.0.
|
|
64
|
+
"@antscorp/antsomi-locales": "1.0.35",
|
|
65
65
|
"@ant-design/cssinjs": "^1.6.2",
|
|
66
66
|
"@antscorp/icons": "0.27.54",
|
|
67
67
|
"@antscorp/image-editor": "1.0.2",
|