@cozeloop/components 0.0.3 → 0.0.5

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 (169) hide show
  1. package/dist/es/index.js +1 -1
  2. package/dist/lib/code-editor/index.js +3 -1
  3. package/dist/lib/code-editor/index.js.map +1 -1
  4. package/dist/lib/tsconfig.build.tsbuildinfo +1 -1
  5. package/package.json +9 -3
  6. package/.eslintcache +0 -1
  7. package/.rush/temp/shrinkwrap-deps.json +0 -770
  8. package/OWNERS +0 -5
  9. package/config/rush-project.json +0 -8
  10. package/eslint.config.js +0 -7
  11. package/rslib.config.js +0 -7
  12. package/script/publish.js +0 -146
  13. package/src/base-search-select/base-search-form-select.tsx +0 -10
  14. package/src/base-search-select/base-search-select.tsx +0 -200
  15. package/src/base-search-select/index.module.less +0 -16
  16. package/src/base-search-select/index.tsx +0 -3
  17. package/src/base-search-select/types.ts +0 -16
  18. package/src/base-search-select/utils.ts +0 -78
  19. package/src/basic-card/index.tsx +0 -23
  20. package/src/card-pane/index.module.less +0 -14
  21. package/src/card-pane/index.tsx +0 -25
  22. package/src/chip-select/index.module.less +0 -17
  23. package/src/chip-select/index.tsx +0 -7
  24. package/src/code-editor/index.tsx +0 -9
  25. package/src/code-usage/code-item.module.less +0 -32
  26. package/src/code-usage/index.tsx +0 -91
  27. package/src/codemirror-editor/code-editor.tsx +0 -139
  28. package/src/codemirror-editor/index.ts +0 -4
  29. package/src/codemirror-editor/json-editor.tsx +0 -183
  30. package/src/codemirror-editor/raw-text-editor.tsx +0 -68
  31. package/src/codemirror-editor/text-editor.tsx +0 -58
  32. package/src/codemirror-editor/themes/coze-dark.ts +0 -116
  33. package/src/codemirror-editor/themes/coze-light.ts +0 -122
  34. package/src/collapse-card/index.module.less +0 -27
  35. package/src/collapse-card/index.tsx +0 -93
  36. package/src/collapsible-card/index.module.less +0 -63
  37. package/src/collapsible-card/index.tsx +0 -57
  38. package/src/column-manage-storage/index.tsx +0 -64
  39. package/src/columns-select/index.tsx +0 -244
  40. package/src/edit-icon-button/index.tsx +0 -36
  41. package/src/footer-actions/index.tsx +0 -33
  42. package/src/hooks/use-infinite-scroll.ts +0 -183
  43. package/src/hooks/use-mouse-down-offset.ts +0 -50
  44. package/src/hooks/use-unsave-leave-warning.ts +0 -49
  45. package/src/id-render/icon-button-container.tsx +0 -37
  46. package/src/id-render/index.tsx +0 -64
  47. package/src/index-controller/record-navigation.tsx +0 -57
  48. package/src/index-controller/use-item-index-controller.ts +0 -197
  49. package/src/index.ts +0 -208
  50. package/src/infinite-scroll-table/index.tsx +0 -99
  51. package/src/info-tooltip/index.tsx +0 -41
  52. package/src/input-components/radio-button.tsx +0 -63
  53. package/src/input-slider/index.module.less +0 -30
  54. package/src/input-slider/index.tsx +0 -161
  55. package/src/input-with-count/index.tsx +0 -31
  56. package/src/jump-button/jump-icon-button.tsx +0 -12
  57. package/src/large-txt-render/index.tsx +0 -46
  58. package/src/layout/content.tsx +0 -28
  59. package/src/layout/header.tsx +0 -15
  60. package/src/layout/index.module.less +0 -28
  61. package/src/layout/index.tsx +0 -9
  62. package/src/layout/tabs.tsx +0 -11
  63. package/src/lazy-load-component/index.tsx +0 -55
  64. package/src/logic-editor/index.ts +0 -3
  65. package/src/logic-editor/logic-editor.module.less +0 -13
  66. package/src/logic-editor/logic-editor.tsx +0 -200
  67. package/src/logic-editor/logic-left-render.tsx +0 -100
  68. package/src/logic-editor/logic-operator-render.tsx +0 -54
  69. package/src/logic-editor/logic-right-render.tsx +0 -51
  70. package/src/logic-editor/logic-types.tsx +0 -238
  71. package/src/logic-editor/utils.ts +0 -22
  72. package/src/logic-expr/assets/select.svg +0 -1
  73. package/src/logic-expr/consts.ts +0 -6
  74. package/src/logic-expr/expr-group-render.tsx +0 -238
  75. package/src/logic-expr/expr-render.tsx +0 -226
  76. package/src/logic-expr/index.module.less +0 -252
  77. package/src/logic-expr/index.ts +0 -13
  78. package/src/logic-expr/logic-expr.tsx +0 -261
  79. package/src/logic-expr/logic-not.tsx +0 -46
  80. package/src/logic-expr/logic-toggle.tsx +0 -96
  81. package/src/logic-expr/types.ts +0 -95
  82. package/src/loop-radio-group/index.tsx +0 -16
  83. package/src/multi-part-editor/components/image-item-renderer.tsx +0 -134
  84. package/src/multi-part-editor/components/index.module.less +0 -21
  85. package/src/multi-part-editor/components/multipart-item-renderer.tsx +0 -74
  86. package/src/multi-part-editor/components/url-input-modal.tsx +0 -317
  87. package/src/multi-part-editor/components/video-item-renderer.tsx +0 -145
  88. package/src/multi-part-editor/index.module.less +0 -8
  89. package/src/multi-part-editor/index.tsx +0 -571
  90. package/src/multi-part-editor/multi-part-render.tsx +0 -87
  91. package/src/multi-part-editor/type.tsx +0 -103
  92. package/src/multi-part-editor/upload-button.tsx +0 -256
  93. package/src/multi-part-editor/utils.ts +0 -64
  94. package/src/open-detail-button/index.tsx +0 -30
  95. package/src/page-content/index.tsx +0 -99
  96. package/src/primary-page/index.tsx +0 -1
  97. package/src/primary-page/primary-header.tsx +0 -64
  98. package/src/primary-title/index.module.less +0 -14
  99. package/src/primary-title/index.tsx +0 -18
  100. package/src/provider/index.tsx +0 -89
  101. package/src/resizable-side-sheet/index.tsx +0 -69
  102. package/src/resize-sidesheet/index.module.less +0 -14
  103. package/src/resize-sidesheet/index.tsx +0 -68
  104. package/src/resize-sidesheet/use-drag.ts +0 -43
  105. package/src/schema-editor/index.tsx +0 -52
  106. package/src/search-form/index.tsx +0 -134
  107. package/src/semi-schema-form/components/tmpls/array-field-item.tsx +0 -97
  108. package/src/semi-schema-form/components/tmpls/array-field.tsx +0 -127
  109. package/src/semi-schema-form/components/tmpls/base-input.tsx +0 -126
  110. package/src/semi-schema-form/components/tmpls/description-field.tsx +0 -23
  111. package/src/semi-schema-form/components/tmpls/error-list.tsx +0 -44
  112. package/src/semi-schema-form/components/tmpls/field-error.tsx +0 -33
  113. package/src/semi-schema-form/components/tmpls/field.tsx +0 -54
  114. package/src/semi-schema-form/components/tmpls/icon-button.tsx +0 -112
  115. package/src/semi-schema-form/components/tmpls/index.ts +0 -39
  116. package/src/semi-schema-form/components/tmpls/object-field.tsx +0 -173
  117. package/src/semi-schema-form/components/tmpls/submit.tsx +0 -31
  118. package/src/semi-schema-form/components/tmpls/title-field.tsx +0 -30
  119. package/src/semi-schema-form/components/widgets/checkbox.tsx +0 -67
  120. package/src/semi-schema-form/components/widgets/checkboxs.tsx +0 -100
  121. package/src/semi-schema-form/components/widgets/index.ts +0 -17
  122. package/src/semi-schema-form/components/widgets/radio.tsx +0 -105
  123. package/src/semi-schema-form/components/widgets/range.tsx +0 -73
  124. package/src/semi-schema-form/components/widgets/select.tsx +0 -108
  125. package/src/semi-schema-form/components/widgets/textarea.tsx +0 -63
  126. package/src/semi-schema-form/index.tsx +0 -14
  127. package/src/sentinel-form/enum.ts +0 -16
  128. package/src/sentinel-form/index.tsx +0 -382
  129. package/src/step-nav/index.module.less +0 -45
  130. package/src/step-nav/index.tsx +0 -53
  131. package/src/table/index.module.less +0 -144
  132. package/src/table/index.tsx +0 -18
  133. package/src/table/sort-icon.tsx +0 -73
  134. package/src/table/table-with-pagination.tsx +0 -150
  135. package/src/table/table-without-pagniation.tsx +0 -66
  136. package/src/table-batch-operate/table-batch-operation.tsx +0 -47
  137. package/src/table-batch-operate/use-batch-operate.ts +0 -111
  138. package/src/table-col-actions/index.module.less +0 -8
  139. package/src/table-col-actions/index.tsx +0 -149
  140. package/src/table-cols-config/index.module.less +0 -34
  141. package/src/table-cols-config/index.tsx +0 -171
  142. package/src/table-cols-config/type.ts +0 -12
  143. package/src/table-cols-config/use-hidden-col-keys.ts +0 -53
  144. package/src/table-cols-config/util.ts +0 -56
  145. package/src/table-empty/index.tsx +0 -23
  146. package/src/table-header/index.module.less +0 -7
  147. package/src/table-header/index.tsx +0 -70
  148. package/src/tabs/index.module.less +0 -48
  149. package/src/tabs/index.tsx +0 -9
  150. package/src/text-area-pro/index.module.less +0 -5
  151. package/src/text-area-pro/index.tsx +0 -49
  152. package/src/text-with-copy/index.tsx +0 -95
  153. package/src/title-with-sub/index.tsx +0 -27
  154. package/src/tooltip-when-disabled/index.tsx +0 -23
  155. package/src/tooltip-with-disabled/index.tsx +0 -17
  156. package/src/types.d.ts +0 -24
  157. package/src/upload/index.ts +0 -39
  158. package/src/user-profile/index.tsx +0 -49
  159. package/src/utils/basic.ts +0 -29
  160. package/src/version-list/index.module.less +0 -16
  161. package/src/version-list/version-descriptions.tsx +0 -80
  162. package/src/version-list/version-item.tsx +0 -30
  163. package/src/version-list/version-list.tsx +0 -59
  164. package/src/version-list/version-switch-panel.tsx +0 -31
  165. package/tailwind.config.ts +0 -6
  166. package/tsconfig.build.json +0 -44
  167. package/tsconfig.json +0 -17
  168. package/tsconfig.misc.json +0 -28
  169. package/vitest.config.mts +0 -7
@@ -1,28 +0,0 @@
1
- import React, { forwardRef, type CSSProperties, type ReactNode } from 'react';
2
-
3
- import classNames from 'classnames';
4
-
5
- export const Content = forwardRef<
6
- HTMLDivElement,
7
- {
8
- children?: ReactNode;
9
- style?: CSSProperties;
10
- className?: string;
11
- top?: ReactNode;
12
- }
13
- >(({ children, style, className, top }, ref) => (
14
- <div className="w-full h-full flex flex-col">
15
- {top}
16
- <div
17
- ref={ref}
18
- className={classNames(
19
- 'bg-white m-4 mb-0 p-4 rounded-md flex-1 flex flex-col overflow-y-auto',
20
- className,
21
- )}
22
- style={style}
23
- >
24
- {children}
25
- </div>
26
- {/* <div className="h-4 shrink-0" /> */}
27
- </div>
28
- ));
@@ -1,15 +0,0 @@
1
- import React, { type ReactNode } from 'react';
2
-
3
- import classNames from 'classnames';
4
-
5
- interface Props {
6
- children?: ReactNode;
7
- className?: string;
8
- }
9
- export function Header({ children, className }: Props) {
10
- return (
11
- <div className={classNames('flex items-center pb-4', className)}>
12
- {children}
13
- </div>
14
- );
15
- }
@@ -1,28 +0,0 @@
1
- .tabs {
2
- position: relative;
3
- top: -14px;
4
-
5
- height: 100%;
6
- display: flex;
7
- flex-direction: column;
8
-
9
- :global {
10
- .semi-tabs-bar{
11
- flex-shrink: 0;
12
- }
13
- .semi-tabs-content {
14
- flex-grow: 1;
15
- flex-shrink: 1;
16
- min-height: 0;
17
- padding: 16px 0 0 0;
18
- }
19
-
20
- .semi-tabs-pane {
21
- height: 100%;
22
- }
23
-
24
- .semi-tabs-pane-motion-overlay {
25
- height: 100%;
26
- }
27
- }
28
- }
@@ -1,9 +0,0 @@
1
- import { Tabs } from './tabs';
2
- import { Header } from './header';
3
- import { Content } from './content';
4
-
5
- export const Layout = {
6
- Header,
7
- Content,
8
- Tabs,
9
- };
@@ -1,11 +0,0 @@
1
- import classNames from 'classnames';
2
- import { type TabsProps, Tabs as SemiTabs } from '@coze-arch/coze-design';
3
-
4
- import styles from './index.module.less';
5
-
6
- export function Tabs({ className, ...props }: TabsProps) {
7
- return <SemiTabs className={classNames(styles.tabs, className)} {...props} />;
8
- }
9
-
10
- Tabs.TabPane = SemiTabs.TabPane;
11
- Tabs.TabItem = SemiTabs.TabItem;
@@ -1,55 +0,0 @@
1
- import React, { useState, useEffect, useRef } from 'react';
2
-
3
- import { Skeleton } from '@coze-arch/coze-design';
4
-
5
- export const LazyLoadComponent = ({
6
- children,
7
- placeholder,
8
- }: {
9
- children: React.ReactNode;
10
- placeholder?: React.ReactNode;
11
- }) => {
12
- const [isVisible, setIsVisible] = useState(false);
13
- const domRef = useRef<HTMLDivElement>(null);
14
-
15
- useEffect(() => {
16
- if ('IntersectionObserver' in window) {
17
- if (!domRef.current) {
18
- return;
19
- }
20
- // 使用 Intersection Observer
21
- const observer = new IntersectionObserver(entries => {
22
- entries.forEach(entry => {
23
- if (entry.isIntersecting) {
24
- setIsVisible(true);
25
- observer.unobserve(domRef.current as Element);
26
- }
27
- });
28
- });
29
-
30
- observer.observe(domRef.current);
31
- return () => observer.disconnect();
32
- } else {
33
- // 回退到 scroll 事件监听
34
- const handleScroll = () => {
35
- if (domRef.current) {
36
- const rect = domRef.current.getBoundingClientRect();
37
- if (rect.top <= window.innerHeight && rect.bottom >= 0) {
38
- setIsVisible(true);
39
- window.removeEventListener('scroll', handleScroll);
40
- }
41
- }
42
- };
43
-
44
- handleScroll(); // 初始化检查
45
- document.addEventListener('scroll', handleScroll);
46
- return () => document.removeEventListener('scroll', handleScroll);
47
- }
48
- }, []);
49
-
50
- return (
51
- <div ref={domRef}>
52
- {isVisible ? children : <Skeleton placeholder={placeholder} />}
53
- </div>
54
- );
55
- };
@@ -1,3 +0,0 @@
1
- export { LogicEditor } from './logic-editor';
2
- export type { LogicDataType, LogicField, LogicFilter } from './logic-types';
3
- export { baseOperations, type LogicSetter } from './logic-types';
@@ -1,13 +0,0 @@
1
- /* stylelint-disable selector-class-pattern */
2
- /* stylelint-disable declaration-no-important */
3
- .expr-logic-editor {
4
- :global {
5
- .expr-render-del-btn {
6
- background-color: #0000 !important;
7
- }
8
-
9
- .expr-render-del-btn:hover {
10
- background-color: rgba(var(--coze-bg-5), var(--coze-bg-5-alpha)) !important;
11
- }
12
- }
13
- }
@@ -1,200 +0,0 @@
1
- import { useEffect, useState } from 'react';
2
-
3
- import classNames from 'classnames';
4
- import { IconCozFilter, IconCozInfoCircle } from '@coze-arch/coze-design/icons';
5
- import {
6
- Button,
7
- Divider,
8
- Popover,
9
- Tooltip,
10
- type PopoverProps,
11
- } from '@coze-arch/coze-design';
12
-
13
- import { LogicExpr } from '../logic-expr';
14
- import { type LogicFilter, type LogicField } from './logic-types';
15
- import RightRender from './logic-right-render';
16
- import OperatorRender from './logic-operator-render';
17
- import LeftRender from './logic-left-render';
18
-
19
- import styles from './logic-editor.module.less';
20
-
21
- const getValidFilterFields = (value?: LogicFilter) => {
22
- if (!value?.exprs) {
23
- return {
24
- exprs: [],
25
- };
26
- }
27
-
28
- const isEmpty = (val: string | undefined | null | string[]) =>
29
- val === undefined ||
30
- val === '' ||
31
- val === null ||
32
- (Array.isArray(val) && val.length === 0);
33
-
34
- // 左中右 三元都存在才有效
35
- const validArray = value.exprs.filter(
36
- // 由于暂时不包含为空不为空的case,所以这里的判断条件要求左中右都必须存在
37
- exp => !isEmpty(exp.left) && !isEmpty(exp.operator) && !isEmpty(exp.right),
38
- );
39
-
40
- return {
41
- exprs: validArray,
42
- };
43
- };
44
-
45
- /** 逻辑筛选器 */
46
- // eslint-disable-next-line @coze-arch/max-line-per-function, complexity
47
- export function LogicEditor({
48
- fields = [],
49
- disabled = false,
50
- value,
51
- popoverProps = {},
52
- tooltip,
53
- clearEmptyCondition = true,
54
- enableCascadeMode = false,
55
- onChange,
56
- onConfirm,
57
- onClose,
58
- }: {
59
- fields: LogicField[];
60
- disabled?: boolean;
61
- value?: LogicFilter | undefined;
62
- popoverProps?: PopoverProps;
63
- tooltip?: React.ReactNode;
64
- /** 是否过滤空条件 */
65
- clearEmptyCondition?: boolean;
66
- /** 字段选择开启级联模式 */
67
- enableCascadeMode?: boolean;
68
- onChange?: (val?: LogicFilter) => void;
69
- onConfirm?: (val?: LogicFilter) => void;
70
- onClose?: () => void;
71
- }) {
72
- const [logicFilter, setLogicFilter] = useState<LogicFilter | undefined>(
73
- value,
74
- );
75
- const [visible, setVisible] = useState(false);
76
-
77
- useEffect(() => {
78
- setLogicFilter(value);
79
- }, [value]);
80
-
81
- const logicExpr = (
82
- <LogicExpr
83
- defaultExpr={{
84
- left: '',
85
- operator: '',
86
- right: '',
87
- }}
88
- value={logicFilter}
89
- onChange={val => {
90
- setLogicFilter(val);
91
- onChange?.(val);
92
- }}
93
- leftRender={renderProps => (
94
- <LeftRender
95
- {...renderProps}
96
- fields={fields}
97
- disabled={disabled}
98
- enableCascadeMode={enableCascadeMode}
99
- />
100
- )}
101
- operatorRender={renderProps => (
102
- <OperatorRender
103
- {...renderProps}
104
- fields={fields}
105
- disabled={disabled}
106
- enableCascadeMode={enableCascadeMode}
107
- />
108
- )}
109
- rightRender={renderProps => (
110
- <RightRender
111
- {...renderProps}
112
- fields={fields}
113
- disabled={disabled}
114
- enableCascadeMode={enableCascadeMode}
115
- />
116
- )}
117
- allowLogicOperators={['and']}
118
- logicToggleReadonly={true}
119
- maxNestingDepth={1}
120
- />
121
- );
122
- const hasMultiExpr =
123
- Array.isArray(logicFilter?.exprs) && logicFilter.exprs.length > 1;
124
- const popoverContentConatienr = (
125
- <div
126
- className={classNames(
127
- 'flex flex-col py-3 gap-3 text-[13px]',
128
- enableCascadeMode ? 'w-[640px]' : 'w-[620px]',
129
- styles['expr-logic-editor'],
130
- )}
131
- >
132
- <div className="flex items-center px-4">
133
- <div className="font-medium">过滤器</div>
134
- {tooltip ? (
135
- <Tooltip theme="dark" content={tooltip}>
136
- <IconCozInfoCircle className="ml-1 text-[var(--coz-fg-secondary)] hover:text-[var(--coz-fg-primary)]" />
137
- </Tooltip>
138
- ) : null}
139
- <div
140
- className="ml-auto cursor-pointer font-medium text-[var(--coz-fg-secondary)] hover:text-[rgb(var(--coze-up-brand-9))]"
141
- onClick={() => {
142
- setLogicFilter(undefined);
143
- onChange?.(undefined);
144
- }}
145
- >
146
- 清空筛选
147
- </div>
148
- </div>
149
- <div className={hasMultiExpr ? '' : 'pl-3 pr-2'}>
150
- <div>{logicExpr}</div>
151
- </div>
152
- <Divider />
153
- <div className="flex justify-end px-4">
154
- <Button
155
- color="brand"
156
- onClick={() => {
157
- let logicFilterData = logicFilter;
158
- if (clearEmptyCondition) {
159
- logicFilterData = getValidFilterFields(logicFilter);
160
- setLogicFilter(logicFilterData);
161
- }
162
- onConfirm?.(logicFilterData);
163
- setVisible(false);
164
- onClose?.();
165
- }}
166
- >
167
- 应用
168
- </Button>
169
- </div>
170
- </div>
171
- );
172
- const count = value?.exprs?.length ?? 0;
173
- return (
174
- <Popover
175
- trigger="click"
176
- position="bottomLeft"
177
- {...popoverProps}
178
- style={{ padding: 0, ...(popoverProps.style ?? {}) }}
179
- visible={visible}
180
- content={popoverContentConatienr}
181
- onVisibleChange={newVisible => {
182
- setVisible(newVisible);
183
- if (!newVisible) {
184
- // 关闭时放弃本次变更,恢复为上层设置的 value
185
- setLogicFilter(value);
186
- onClose?.();
187
- }
188
- }}
189
- >
190
- <Button icon={<IconCozFilter />} color="primary">
191
- 过滤器
192
- {count ? (
193
- <div className="flex items-center justify-center w-5 h-5 rounded-[50%] text-brand-9 bg-brand-4 ml-1 text-[13px]">
194
- {count}
195
- </div>
196
- ) : null}
197
- </Button>
198
- </Popover>
199
- );
200
- }
@@ -1,100 +0,0 @@
1
- import { Cascader, Select } from '@coze-arch/coze-design';
2
-
3
- import { type LeftRenderProps } from '../logic-expr';
4
- import { findFieldByPath } from './utils';
5
- import {
6
- dataTypeList,
7
- type LogicOperation,
8
- type RenderProps,
9
- type LogicField,
10
- type LogicFilterLeft,
11
- } from './logic-types';
12
-
13
- function fieldsToOptions(fields: LogicField[]) {
14
- return fields.map(field => ({
15
- label: field.title,
16
- value: field.name,
17
- children: field.children?.length
18
- ? fieldsToOptions(field.children)
19
- : undefined,
20
- }));
21
- }
22
-
23
- export default function LeftRender(
24
- props: LeftRenderProps<LogicFilterLeft, string, string | number | undefined> &
25
- RenderProps,
26
- ) {
27
- const { expr, onExprChange, fields, disabled, enableCascadeMode } = props;
28
- if (enableCascadeMode) {
29
- return (
30
- <div className="w-56">
31
- <Cascader
32
- placeholder="请选择"
33
- value={expr.left}
34
- className="w-full"
35
- disabled={disabled}
36
- treeData={fieldsToOptions(fields)}
37
- onChange={cascadeVal => {
38
- if (!Array.isArray(cascadeVal)) {
39
- return;
40
- }
41
- const fieldPaths = cascadeVal as string[];
42
- const field = findFieldByPath(fields, fieldPaths);
43
- const { disabledOperations = [], customOperations } = field ?? {};
44
- const dataType = dataTypeList.find(
45
- item => item.type === field?.type,
46
- );
47
- let operations = dataType?.operations ?? [];
48
- if (Array.isArray(customOperations)) {
49
- operations = customOperations;
50
- } else if (disabledOperations.length > 0) {
51
- operations = operations.filter(
52
- item => !disabledOperations.includes(item.value),
53
- );
54
- }
55
- onExprChange?.({
56
- left: [...fieldPaths],
57
- operator: operations?.find(e => e.value === expr.operator)
58
- ? expr.operator
59
- : operations?.[0]?.value,
60
- right: undefined,
61
- });
62
- }}
63
- />
64
- </div>
65
- );
66
- }
67
- return (
68
- <div className="w-40">
69
- <Select
70
- placeholder="请选择"
71
- value={expr.left}
72
- className="w-full"
73
- disabled={disabled}
74
- filter={true}
75
- optionList={fieldsToOptions(fields)}
76
- onChange={val => {
77
- const field = fields.find(item => item.name === val);
78
- const { disabledOperations = [] } = field ?? {};
79
- const dataType = dataTypeList.find(item => item.type === field?.type);
80
- let operations = (field?.operatorProps?.operations ??
81
- dataType?.operations ??
82
- []) as LogicOperation[];
83
-
84
- if (disabledOperations.length > 0) {
85
- operations = operations.filter(
86
- item => !disabledOperations.includes(item.value),
87
- );
88
- }
89
- onExprChange?.({
90
- left: val as string | undefined,
91
- operator: operations?.find(e => e.value === expr.operator)
92
- ? expr.operator
93
- : operations?.[0]?.value,
94
- right: undefined,
95
- });
96
- }}
97
- />
98
- </div>
99
- );
100
- }
@@ -1,54 +0,0 @@
1
- import { Select } from '@coze-arch/coze-design';
2
-
3
- import { type OperatorRenderProps } from '../logic-expr';
4
- import { findFieldByPath } from './utils';
5
- import {
6
- dataTypeList,
7
- type LogicOperation,
8
- type LogicFilterLeft,
9
- type RenderProps,
10
- } from './logic-types';
11
-
12
- export default function OperatorRender(
13
- props: OperatorRenderProps<
14
- LogicFilterLeft,
15
- string,
16
- string | number | undefined
17
- > &
18
- RenderProps,
19
- ) {
20
- const { expr, onExprChange, fields, disabled = false } = props;
21
- const field = findFieldByPath(fields, expr.left);
22
- const dataType = dataTypeList.find(item => item.type === field?.type);
23
- if (!field) {
24
- return null;
25
- }
26
- const { disabledOperations = [], customOperations } = field;
27
- let options = (field.operatorProps?.operations ??
28
- dataType?.operations ??
29
- []) as LogicOperation[];
30
-
31
- if (Array.isArray(customOperations)) {
32
- options = customOperations;
33
- } else if (disabledOperations.length > 0) {
34
- options = options.filter(item => !disabledOperations.includes(item.value));
35
- }
36
-
37
- return (
38
- <div className="w-24">
39
- <Select
40
- placeholder="操作符"
41
- value={expr.operator}
42
- style={{ width: '100%' }}
43
- disabled={disabled}
44
- optionList={options}
45
- onChange={val => {
46
- onExprChange?.({
47
- ...expr,
48
- operator: val as string | undefined,
49
- });
50
- }}
51
- />
52
- </div>
53
- );
54
- }
@@ -1,51 +0,0 @@
1
- import { type Expr, type RightRenderProps } from '../logic-expr';
2
- import { findFieldByPath } from './utils';
3
- import {
4
- dataTypeList,
5
- type LogicFilterLeft,
6
- type RenderProps,
7
- } from './logic-types';
8
-
9
- export default function RightRender(
10
- props: RightRenderProps<
11
- LogicFilterLeft,
12
- string,
13
- string | number | undefined
14
- > &
15
- RenderProps,
16
- ) {
17
- const { expr, onExprChange, fields, disabled = false } = props;
18
- const field = findFieldByPath(fields, expr.left);
19
- if (!field) {
20
- return null;
21
- }
22
- if (expr.operator === 'is-empty' || expr.operator === 'is-not-empty') {
23
- return null;
24
- }
25
-
26
- const Setter =
27
- field?.setter ||
28
- dataTypeList.find(dataType => dataType.type === field.type)?.setter;
29
-
30
- if (!Setter) {
31
- return null;
32
- }
33
-
34
- return (
35
- <div className="w-48 grow overflow-hidden">
36
- <Setter
37
- {...(field.setterProps ?? {})}
38
- expr={expr as Expr<string, string, string>}
39
- field={field}
40
- disabled={disabled}
41
- value={expr.right as string}
42
- onChange={val => {
43
- onExprChange?.({
44
- ...expr,
45
- right: val as string | undefined,
46
- });
47
- }}
48
- />
49
- </div>
50
- );
51
- }