@synerise/ds-filter 0.12.1 → 0.13.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,26 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.13.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-filter@0.12.2...@synerise/ds-filter@0.13.0) (2022-09-26)
7
+
8
+
9
+ ### Features
10
+
11
+ * **filter:** changes after review ([d2c30a7](https://github.com/Synerise/synerise-design/commit/d2c30a75e1bed46ca4da78c3f390d0f51614c659))
12
+ * **filter:** limiting the number of conditions ([6f0d114](https://github.com/Synerise/synerise-design/commit/6f0d114735abc97362b461adc138f7fcadc39456))
13
+
14
+
15
+
16
+
17
+
18
+ ## [0.12.2](https://github.com/Synerise/synerise-design/compare/@synerise/ds-filter@0.12.1...@synerise/ds-filter@0.12.2) (2022-08-31)
19
+
20
+ **Note:** Version bump only for package @synerise/ds-filter
21
+
22
+
23
+
24
+
25
+
6
26
  ## [0.12.1](https://github.com/Synerise/synerise-design/compare/@synerise/ds-filter@0.12.0...@synerise/ds-filter@0.12.1) (2022-08-25)
7
27
 
8
28
  **Note:** Version bump only for package @synerise/ds-filter
package/dist/Filter.js CHANGED
@@ -30,7 +30,8 @@ var component = {
30
30
  };
31
31
 
32
32
  var Filter = function Filter(_ref) {
33
- var expressions = _ref.expressions,
33
+ var maxConditionsLimit = _ref.maxConditionsLimit,
34
+ expressions = _ref.expressions,
34
35
  matching = _ref.matching,
35
36
  onChangeOrder = _ref.onChangeOrder,
36
37
  onChangeLogic = _ref.onChangeLogic,
@@ -65,6 +66,9 @@ var Filter = function Filter(_ref) {
65
66
  }),
66
67
  dropMeHere: formatMessage({
67
68
  id: 'DS.FILTER.DROP-ME-HERE'
69
+ }),
70
+ conditionsLimit: formatMessage({
71
+ id: 'DS.FILTER.CONDITIONS-LIMIT'
68
72
  })
69
73
  }, texts, {
70
74
  matching: _objectSpread({
@@ -149,6 +153,9 @@ var Filter = function Filter(_ref) {
149
153
  var isActive = React.useCallback(function (expression) {
150
154
  return expression.id === activeExpressionId;
151
155
  }, [activeExpressionId]);
156
+ var isLimitExceeded = React.useMemo(function () {
157
+ return maxConditionsLimit ? expressions.length >= maxConditionsLimit : false;
158
+ }, [expressions, maxConditionsLimit]);
152
159
  var componentProps = React.useCallback(function (expression) {
153
160
  var contextTypeTexts = getContextTypeTexts(expression);
154
161
  var props = {
@@ -168,16 +175,16 @@ var Filter = function Filter(_ref) {
168
175
  onDelete: function onDelete() {
169
176
  return onDeleteStep(expression.id);
170
177
  },
171
- onDuplicate: function onDuplicate() {
178
+ onDuplicate: !isLimitExceeded ? function () {
172
179
  return onDuplicateStep(expression.id);
173
- },
180
+ } : undefined,
174
181
  footer: renderStepFooter && renderStepFooter(expression),
175
182
  children: renderStepContent && renderStepContent(expression, !!activeExpressionId && !isActive(expression)),
176
183
  texts: _objectSpread({}, text.step, {}, contextTypeTexts)
177
184
  }
178
185
  };
179
186
  return props[expression.type];
180
- }, [activeExpressionId, getContextTypeTexts, isActive, logicOptions, onChangeLogic, onChangeStepMatching, onChangeStepName, onDeleteStep, onDuplicateStep, renderStepContent, renderStepFooter, text.step]);
187
+ }, [activeExpressionId, getContextTypeTexts, isActive, isLimitExceeded, logicOptions, onChangeLogic, onChangeStepMatching, onChangeStepName, onDeleteStep, onDuplicateStep, renderStepContent, renderStepFooter, text.step]);
181
188
  var renderExpression = React.useCallback(function (expression, index) {
182
189
  var Component = component[expression.type];
183
190
  var LogicComponent = expression.logic && component[expression.logic.type];
@@ -193,14 +200,16 @@ var Filter = function Filter(_ref) {
193
200
  }
194
201
  }, /*#__PURE__*/React.createElement(Component, _extends({}, expression.data, componentProps(expression))), expression.logic && index + 1 < expressions.length && /*#__PURE__*/React.createElement(S.LogicWrapper, null, /*#__PURE__*/React.createElement(LogicComponent, _extends({}, expression.logic.data, componentProps(expression.logic)))));
195
202
  }, [text.dropMeHere, isActive, componentProps, expressions.length]);
196
- return /*#__PURE__*/React.createElement(S.FilterWrapper, null, matching && /*#__PURE__*/React.createElement(MatchingWrapper, null, /*#__PURE__*/React.createElement(Matching, _extends({}, matching, {
203
+ return /*#__PURE__*/React.createElement(S.FilterWrapper, null, /*#__PURE__*/React.createElement(MatchingWrapper, null, /*#__PURE__*/React.createElement("div", null, matching && /*#__PURE__*/React.createElement(Matching, _extends({}, matching, {
197
204
  texts: text.matching
198
- }))), /*#__PURE__*/React.createElement(React.Fragment, null, expressions.length > 0 ? /*#__PURE__*/React.createElement(ReactSortable, _extends({}, SORTABLE_CONFIG, {
205
+ }))), !!maxConditionsLimit && /*#__PURE__*/React.createElement(S.ConditionsLimit, null, text.conditionsLimit, ":", ' ', /*#__PURE__*/React.createElement(S.ConditionsLimitResults, null, expressions.length, "/", maxConditionsLimit))), /*#__PURE__*/React.createElement(React.Fragment, null, expressions.length > 0 ? /*#__PURE__*/React.createElement(ReactSortable, _extends({}, SORTABLE_CONFIG, {
199
206
  list: expressions,
200
207
  setList: onChangeOrder
201
208
  }), expressions.map(renderExpression)) : /*#__PURE__*/React.createElement(Placeholder, {
202
209
  text: text.placeholder.chooseCondition
203
- })), addFilterComponent && /*#__PURE__*/React.createElement(S.AddButtonWrapper, null, addFilterComponent));
210
+ })), addFilterComponent && /*#__PURE__*/React.createElement(S.AddButtonWrapper, null, typeof addFilterComponent === 'function' ? addFilterComponent({
211
+ isLimitExceeded: isLimitExceeded
212
+ }) : addFilterComponent));
204
213
  };
205
214
 
206
215
  export default Filter;
@@ -1,5 +1,7 @@
1
1
  export declare const FilterWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
2
2
  export declare const MatchingWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
3
+ export declare const ConditionsLimit: import("styled-components").StyledComponent<"div", any, {}, never>;
4
+ export declare const ConditionsLimitResults: import("styled-components").StyledComponent<"span", any, {}, never>;
3
5
  export declare const LogicWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
4
6
  export declare const ExpressionWrapper: import("styled-components").StyledComponent<"div", any, {
5
7
  index: number;
@@ -7,14 +7,22 @@ export var FilterWrapper = styled.div.withConfig({
7
7
  export var MatchingWrapper = styled.div.withConfig({
8
8
  displayName: "Filterstyles__MatchingWrapper",
9
9
  componentId: "w5f27p-1"
10
- })(["margin-bottom:24px;"]);
10
+ })(["display:flex;align-items:center;justify-content:space-between;align-content:flex-end;margin-bottom:24px;"]);
11
+ export var ConditionsLimit = styled.div.withConfig({
12
+ displayName: "Filterstyles__ConditionsLimit",
13
+ componentId: "w5f27p-2"
14
+ })(["margin-left:16px;"]);
15
+ export var ConditionsLimitResults = styled.span.withConfig({
16
+ displayName: "Filterstyles__ConditionsLimitResults",
17
+ componentId: "w5f27p-3"
18
+ })(["font-weight:500;"]);
11
19
  export var LogicWrapper = styled.div.withConfig({
12
20
  displayName: "Filterstyles__LogicWrapper",
13
- componentId: "w5f27p-2"
21
+ componentId: "w5f27p-4"
14
22
  })(["margin:22px 0;"]);
15
23
  export var ExpressionWrapper = styled.div.withConfig({
16
24
  displayName: "Filterstyles__ExpressionWrapper",
17
- componentId: "w5f27p-3"
25
+ componentId: "w5f27p-5"
18
26
  })(["width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;z-index:", ";&.sortable-chosen{cursor:grabbing;width:100%;opacity:1 !important;height:50px;display:flex;align-items:center;justify-content:center;padding:0;box-shadow:0 16px 32px 0 #23293619;", "{visibility:visible;opacity:1;}", "{display:none;}", "{display:none;}", "{display:none;}}&.ghost-element{cursor:grabbing;width:100%;background-color:", ";border-left:2px solid ", ";border-radius:3px;display:flex;align-items:center;justify-content:center;padding:0;margin-bottom:24px;height:68px;box-shadow:none;position:relative;&:before{content:attr(data-dropLabel);text-align:center;position:relative;color:", ";}*{display:none;}}"], function (props) {
19
27
  return 1000 - props.index;
20
28
  }, DragIcon, Body, Footer, LogicWrapper, function (props) {
@@ -26,5 +34,5 @@ export var ExpressionWrapper = styled.div.withConfig({
26
34
  });
27
35
  export var AddButtonWrapper = styled.div.withConfig({
28
36
  displayName: "Filterstyles__AddButtonWrapper",
29
- componentId: "w5f27p-4"
37
+ componentId: "w5f27p-6"
30
38
  })(["display:flex;align-items:flex-start;justify-content:flex-start;margin:24px 0 0;width:100%;"]);
@@ -15,7 +15,11 @@ export declare type StepType = {
15
15
  expressionType?: 'attribute' | 'event';
16
16
  };
17
17
  export declare type Expression = LogicType | StepType;
18
+ export declare type addFilterComponentProps = {
19
+ isLimitExceeded: boolean;
20
+ };
18
21
  export declare type FilterProps = {
22
+ maxConditionsLimit?: number;
19
23
  expressions: Expression[];
20
24
  matching?: MatchingProps;
21
25
  onChangeOrder: (newOrder: Expression[]) => void;
@@ -26,7 +30,7 @@ export declare type FilterProps = {
26
30
  onDuplicateStep: (id: string) => void;
27
31
  renderStepFooter?: (expression: Expression) => React.ReactNode;
28
32
  renderStepContent?: (expression: Expression, hoverDisabled?: boolean) => React.ReactNode;
29
- addFilterComponent?: React.ReactNode;
33
+ addFilterComponent?: React.ReactNode | ((arg: addFilterComponentProps) => React.ReactNode);
30
34
  logicOptions?: LogicOperator[];
31
35
  texts?: {
32
36
  matching?: MatchingTexts;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-filter",
3
- "version": "0.12.1",
3
+ "version": "0.13.0",
4
4
  "description": "Filter UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -32,9 +32,9 @@
32
32
  ],
33
33
  "types": "dist/index.d.ts",
34
34
  "dependencies": {
35
- "@synerise/ds-button": "^0.17.8",
36
- "@synerise/ds-icon": "^0.50.0",
37
- "@synerise/ds-logic": "^0.7.7",
35
+ "@synerise/ds-button": "^0.17.9",
36
+ "@synerise/ds-icon": "^0.51.0",
37
+ "@synerise/ds-logic": "^0.7.8",
38
38
  "@synerise/ds-step-card": "^0.6.3",
39
39
  "react-sortablejs": "^6.0.0"
40
40
  },
@@ -43,5 +43,5 @@
43
43
  "@synerise/ds-step-card": "*",
44
44
  "react": ">=16.9.0 < 17.0.0"
45
45
  },
46
- "gitHead": "c9530f0548fa244796b0c6b1ea5fa3d6330e84ea"
46
+ "gitHead": "c952524bf8a0690fff0bb6b1ef6d13bc3c2ce820"
47
47
  }