@synerise/ds-filter 0.12.2 → 0.13.1

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,31 @@
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.1](https://github.com/Synerise/synerise-design/compare/@synerise/ds-filter@0.13.0...@synerise/ds-filter@0.13.1) (2022-11-23)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **filter:** add props to dependency array ([3ba9f26](https://github.com/Synerise/synerise-design/commit/3ba9f26547805967bbe74b66df6112fde8c581e3))
12
+ * **filter:** add props to overwrite filter title ([889753a](https://github.com/Synerise/synerise-design/commit/889753a305d6aba7ccf817bc11d6b44b5a06447f))
13
+ * **filter:** filter props to hide step card header ([b117415](https://github.com/Synerise/synerise-design/commit/b11741522b60065e905bfac76e926b93f9d26568))
14
+
15
+
16
+
17
+
18
+
19
+ # [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)
20
+
21
+
22
+ ### Features
23
+
24
+ * **filter:** changes after review ([d2c30a7](https://github.com/Synerise/synerise-design/commit/d2c30a75e1bed46ca4da78c3f390d0f51614c659))
25
+ * **filter:** limiting the number of conditions ([6f0d114](https://github.com/Synerise/synerise-design/commit/6f0d114735abc97362b461adc138f7fcadc39456))
26
+
27
+
28
+
29
+
30
+
6
31
  ## [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)
7
32
 
8
33
  **Note:** Version bump only for package @synerise/ds-filter
package/dist/Filter.js CHANGED
@@ -30,7 +30,10 @@ var component = {
30
30
  };
31
31
 
32
32
  var Filter = function Filter(_ref) {
33
- var expressions = _ref.expressions,
33
+ var _texts$overwritten;
34
+
35
+ var maxConditionsLimit = _ref.maxConditionsLimit,
36
+ expressions = _ref.expressions,
34
37
  matching = _ref.matching,
35
38
  onChangeOrder = _ref.onChangeOrder,
36
39
  onChangeLogic = _ref.onChangeLogic,
@@ -42,7 +45,11 @@ var Filter = function Filter(_ref) {
42
45
  renderStepContent = _ref.renderStepContent,
43
46
  addFilterComponent = _ref.addFilterComponent,
44
47
  texts = _ref.texts,
45
- logicOptions = _ref.logicOptions;
48
+ logicOptions = _ref.logicOptions,
49
+ _ref$visibilityConfig = _ref.visibilityConfig,
50
+ visibilityConfig = _ref$visibilityConfig === void 0 ? {
51
+ isStepCardHeaderVisible: true
52
+ } : _ref$visibilityConfig;
46
53
  var previousExpressions = usePrevious(expressions);
47
54
 
48
55
  var _React$useState = React.useState(null),
@@ -65,6 +72,9 @@ var Filter = function Filter(_ref) {
65
72
  }),
66
73
  dropMeHere: formatMessage({
67
74
  id: 'DS.FILTER.DROP-ME-HERE'
75
+ }),
76
+ conditionsLimit: formatMessage({
77
+ id: 'DS.FILTER.CONDITIONS-LIMIT'
68
78
  })
69
79
  }, texts, {
70
80
  matching: _objectSpread({
@@ -149,6 +159,9 @@ var Filter = function Filter(_ref) {
149
159
  var isActive = React.useCallback(function (expression) {
150
160
  return expression.id === activeExpressionId;
151
161
  }, [activeExpressionId]);
162
+ var isLimitExceeded = React.useMemo(function () {
163
+ return maxConditionsLimit ? expressions.length >= maxConditionsLimit : false;
164
+ }, [expressions, maxConditionsLimit]);
152
165
  var componentProps = React.useCallback(function (expression) {
153
166
  var contextTypeTexts = getContextTypeTexts(expression);
154
167
  var props = {
@@ -168,16 +181,17 @@ var Filter = function Filter(_ref) {
168
181
  onDelete: function onDelete() {
169
182
  return onDeleteStep(expression.id);
170
183
  },
171
- onDuplicate: function onDuplicate() {
184
+ onDuplicate: !isLimitExceeded ? function () {
172
185
  return onDuplicateStep(expression.id);
173
- },
186
+ } : undefined,
174
187
  footer: renderStepFooter && renderStepFooter(expression),
175
188
  children: renderStepContent && renderStepContent(expression, !!activeExpressionId && !isActive(expression)),
189
+ isHeaderVisible: visibilityConfig.isStepCardHeaderVisible,
176
190
  texts: _objectSpread({}, text.step, {}, contextTypeTexts)
177
191
  }
178
192
  };
179
193
  return props[expression.type];
180
- }, [activeExpressionId, getContextTypeTexts, isActive, logicOptions, onChangeLogic, onChangeStepMatching, onChangeStepName, onDeleteStep, onDuplicateStep, renderStepContent, renderStepFooter, text.step]);
194
+ }, [activeExpressionId, getContextTypeTexts, isActive, isLimitExceeded, logicOptions, onChangeLogic, onChangeStepMatching, onChangeStepName, onDeleteStep, onDuplicateStep, renderStepContent, renderStepFooter, text.step, visibilityConfig.isStepCardHeaderVisible]);
181
195
  var renderExpression = React.useCallback(function (expression, index) {
182
196
  var Component = component[expression.type];
183
197
  var LogicComponent = expression.logic && component[expression.logic.type];
@@ -193,14 +207,16 @@ var Filter = function Filter(_ref) {
193
207
  }
194
208
  }, /*#__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
209
  }, [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, {
210
+ return /*#__PURE__*/React.createElement(S.FilterWrapper, null, texts != null && (_texts$overwritten = texts.overwritten) != null && _texts$overwritten.filterTitle ? /*#__PURE__*/React.createElement(S.FilterTitle, null, texts.overwritten.filterTitle) : /*#__PURE__*/React.createElement(MatchingWrapper, null, /*#__PURE__*/React.createElement("div", null, matching && /*#__PURE__*/React.createElement(Matching, _extends({}, matching, {
197
211
  texts: text.matching
198
- }))), /*#__PURE__*/React.createElement(React.Fragment, null, expressions.length > 0 ? /*#__PURE__*/React.createElement(ReactSortable, _extends({}, SORTABLE_CONFIG, {
212
+ }))), !!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
213
  list: expressions,
200
214
  setList: onChangeOrder
201
215
  }), expressions.map(renderExpression)) : /*#__PURE__*/React.createElement(Placeholder, {
202
216
  text: text.placeholder.chooseCondition
203
- })), addFilterComponent && /*#__PURE__*/React.createElement(S.AddButtonWrapper, null, addFilterComponent));
217
+ })), addFilterComponent && /*#__PURE__*/React.createElement(S.AddButtonWrapper, null, typeof addFilterComponent === 'function' ? addFilterComponent({
218
+ isLimitExceeded: isLimitExceeded
219
+ }) : addFilterComponent));
204
220
  };
205
221
 
206
222
  export default Filter;
@@ -1,7 +1,10 @@
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;
6
8
  }, never>;
7
9
  export declare const AddButtonWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
10
+ export declare const FilterTitle: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -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,11 @@ 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"
30
- })(["display:flex;align-items:flex-start;justify-content:flex-start;margin:24px 0 0;width:100%;"]);
37
+ componentId: "w5f27p-6"
38
+ })(["display:flex;align-items:flex-start;justify-content:flex-start;margin:24px 0 0;width:100%;"]);
39
+ export var FilterTitle = styled.div.withConfig({
40
+ displayName: "Filterstyles__FilterTitle",
41
+ componentId: "w5f27p-7"
42
+ })(["font-size:16px;font-weight:500;line-height:1.25;color:", ";text-align:left;user-select:none;&:first-letter{text-transform:uppercase;}"], function (props) {
43
+ return props.theme.palette['grey-800'];
44
+ });
@@ -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;
@@ -52,5 +56,11 @@ export declare type FilterProps = {
52
56
  };
53
57
  addFilter?: string;
54
58
  dropMeHere?: string;
59
+ overwritten?: {
60
+ filterTitle?: string;
61
+ };
62
+ };
63
+ visibilityConfig: {
64
+ isStepCardHeaderVisible?: boolean;
55
65
  };
56
66
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-filter",
3
- "version": "0.12.2",
3
+ "version": "0.13.1",
4
4
  "description": "Filter UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -43,5 +43,5 @@
43
43
  "@synerise/ds-step-card": "*",
44
44
  "react": ">=16.9.0 < 17.0.0"
45
45
  },
46
- "gitHead": "ef480757296035e4ba2928cd169a98458477b8d1"
46
+ "gitHead": "d40a37ab255097be874ce7efc0c2bcc54d3cc943"
47
47
  }