@pega/custom-dx-components 2.0.16 → 2.0.17

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 (117) hide show
  1. package/package.json +2 -2
  2. package/src/cli.js +18 -0
  3. package/src/tasks/authenticate/index.js +3 -1
  4. package/src/tasks/build/helper.js +123 -0
  5. package/src/tasks/build/index.js +54 -0
  6. package/src/tasks/{publish/bundle → bundle}/builder/index.js +0 -0
  7. package/src/tasks/{publish/bundle → bundle}/builder/modules.js +0 -0
  8. package/src/tasks/{publish/bundle → bundle}/builder/paths.js +0 -0
  9. package/src/tasks/{publish/bundle → bundle}/builder/webpack.config.js +0 -2
  10. package/src/tasks/{publish/bundle → bundle}/index.js +2 -2
  11. package/src/tasks/create/index.js +6 -3
  12. package/src/tasks/create/templates/Constellation/Field/Boolean/boolean-format.js.mustache +1 -1
  13. package/src/tasks/create/templates/Constellation/Field/Boolean/demo.stories.jsx.mustache +29 -18
  14. package/src/tasks/create/templates/Constellation/Field/Boolean/index.jsx.mustache +1 -2
  15. package/src/tasks/create/templates/Constellation/Field/Boolean/mock.stories.js.mustache +21 -0
  16. package/src/tasks/create/templates/Constellation/Field/Date/DateFormatter.js.mustache +61 -0
  17. package/src/tasks/create/templates/Constellation/Field/Date/FormattedText.jsx.mustache +41 -0
  18. package/src/tasks/create/templates/Constellation/Field/Date/date.js.mustache +179 -67
  19. package/src/tasks/create/templates/Constellation/Field/Date/demo.stories.jsx.mustache +40 -16
  20. package/src/tasks/create/templates/Constellation/Field/Date/index.jsx.mustache +3 -1
  21. package/src/tasks/create/templates/Constellation/Field/Date/mock.stories.js.mustache +23 -0
  22. package/src/tasks/create/templates/Constellation/Field/DateTime/date-time.js.mustache +0 -1
  23. package/src/tasks/create/templates/Constellation/Field/DateTime/{date-utils.js → date-utils.js.mustache} +1 -0
  24. package/src/tasks/create/templates/Constellation/Field/DateTime/date.js.mustache +1 -0
  25. package/src/tasks/create/templates/Constellation/Field/DateTime/demo.stories.jsx.mustache +40 -15
  26. package/src/tasks/create/templates/Constellation/Field/DateTime/index.jsx.mustache +2 -0
  27. package/src/tasks/create/templates/Constellation/Field/DateTime/mock.stories.js.mustache +23 -0
  28. package/src/tasks/create/templates/Constellation/Field/Decimal/demo.stories.jsx.mustache +22 -17
  29. package/src/tasks/create/templates/Constellation/Field/Decimal/index.jsx.mustache +2 -1
  30. package/src/tasks/create/templates/Constellation/Field/Decimal/mock.stories.js.mustache +21 -0
  31. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/demo.stories.jsx.mustache +25 -17
  32. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/index.jsx.mustache +3 -4
  33. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/mock.stories.js.mustache +23 -0
  34. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/demo.stories.jsx.mustache +22 -17
  35. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/index.jsx.mustache +8 -2
  36. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/mock.stories.js.mustache +21 -0
  37. package/src/tasks/create/templates/Constellation/Field/Integer/demo.stories.jsx.mustache +22 -17
  38. package/src/tasks/create/templates/Constellation/Field/Integer/index.jsx.mustache +2 -1
  39. package/src/tasks/create/templates/Constellation/Field/Integer/mock.stories.js.mustache +21 -0
  40. package/src/tasks/create/templates/Constellation/Field/Picklist/demo.stories.jsx.mustache +42 -14
  41. package/src/tasks/create/templates/Constellation/Field/Picklist/index.jsx.mustache +44 -1
  42. package/src/tasks/create/templates/Constellation/Field/Picklist/mock.stories.js.mustache +67 -0
  43. package/src/tasks/create/templates/Constellation/Field/Text/demo.stories.jsx.mustache +21 -16
  44. package/src/tasks/create/templates/Constellation/Field/Text/mock.stories.js.mustache +13 -0
  45. package/src/tasks/create/templates/Constellation/Field/Text-Email/demo.stories.jsx.mustache +20 -16
  46. package/src/tasks/create/templates/Constellation/Field/Text-Email/index.jsx.mustache +44 -2
  47. package/src/tasks/create/templates/Constellation/Field/Text-Email/mock.stories.js.mustache +22 -0
  48. package/src/tasks/create/templates/Constellation/Field/Text-Input/{StatusWork.js → StatusWork.jsx} +0 -1
  49. package/src/tasks/create/templates/Constellation/Field/Text-Input/demo.stories.jsx.mustache +21 -17
  50. package/src/tasks/create/templates/Constellation/Field/Text-Input/index.jsx.mustache +46 -3
  51. package/src/tasks/create/templates/Constellation/Field/Text-Input/mock.stories.js.mustache +21 -0
  52. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/demo.stories.jsx.mustache +21 -17
  53. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/index.jsx.mustache +44 -2
  54. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/mock.stories.js.mustache +20 -0
  55. package/src/tasks/create/templates/Constellation/Field/Text-Phone/demo.stories.jsx.mustache +19 -17
  56. package/src/tasks/create/templates/Constellation/Field/Text-Phone/index.jsx.mustache +46 -2
  57. package/src/tasks/create/templates/Constellation/Field/Text-Phone/mock.stories.js.mustache +37 -0
  58. package/src/tasks/create/templates/Constellation/Field/Text-URL/demo.stories.jsx.mustache +19 -17
  59. package/src/tasks/create/templates/Constellation/Field/Text-URL/index.jsx.mustache +174 -3
  60. package/src/tasks/create/templates/Constellation/Field/Text-URL/mock.stories.js.mustache +22 -0
  61. package/src/tasks/create/templates/Constellation/Field/TimeofDay/demo.stories.jsx.mustache +24 -16
  62. package/src/tasks/create/templates/Constellation/Field/TimeofDay/mock.stories.js.mustache +20 -0
  63. package/src/tasks/create/templates/Constellation/Field/TimeofDay/time-of-day.js.mustache +1 -0
  64. package/src/tasks/create/templates/Constellation/Template/DETAILS/StatusWork.jsx.mustache +26 -0
  65. package/src/tasks/create/templates/Constellation/Template/DETAILS/demo.stories.jsx.mustache +110 -0
  66. package/src/tasks/create/templates/Constellation/Template/DETAILS/index.jsx.mustache +14 -29
  67. package/src/tasks/create/templates/Constellation/Template/DETAILS/mock.stories.js.mustache +179 -0
  68. package/src/tasks/create/templates/Constellation/Template/DETAILS/utils.js.mustache +3 -77
  69. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/StatusWork.jsx.mustache +26 -0
  70. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/demo.stories.jsx.mustache +118 -0
  71. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.jsx.mustache +14 -29
  72. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/mock.stories.js.mustache +215 -0
  73. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/utils.js.mustache +3 -74
  74. package/src/tasks/create/templates/Constellation/Template/FORM/demo.stories.jsx.mustache +89 -0
  75. package/src/tasks/create/templates/Constellation/Template/FORM/index.jsx.mustache +6 -10
  76. package/src/tasks/create/templates/Constellation/Template/FORM/mock.stories.js.mustache +125 -0
  77. package/src/tasks/create/templates/Constellation/Template/FORM-region/demo.stories.jsx.mustache +100 -0
  78. package/src/tasks/create/templates/Constellation/Template/FORM-region/index.jsx.mustache +10 -8
  79. package/src/tasks/create/templates/Constellation/Template/FORM-region/mock.stories.js.mustache +131 -0
  80. package/src/tasks/create/templates/Constellation/Template/PAGE/{GetNextWork.js.mustache → GetNextWork.jsx.mustache} +6 -0
  81. package/src/tasks/create/templates/Constellation/Template/PAGE/demo.stories.jsx.mustache +102 -0
  82. package/src/tasks/create/templates/Constellation/Template/PAGE/index.jsx.mustache +9 -7
  83. package/src/tasks/create/templates/Constellation/Template/PAGE/mock.stories.js.mustache +94 -0
  84. package/src/tasks/create/templates/Constellation/Template/PAGE/utils.js.mustache +4 -1
  85. package/src/tasks/create/templates/Constellation/Widget/CASE/demo.stories.jsx.mustache +78 -0
  86. package/src/tasks/create/templates/Constellation/Widget/CASE/index.jsx.mustache +1 -0
  87. package/src/tasks/create/templates/Constellation/Widget/CASE/mock.stories.js.mustache +389 -0
  88. package/src/tasks/create/templates/Constellation/Widget/PAGE/demo.stories.jsx.mustache +30 -0
  89. package/src/tasks/create/templates/Constellation/Widget/PAGE/index.jsx.mustache +8 -8
  90. package/src/tasks/create/templates/Constellation/Widget/PAGE/mock.stories.js.mustache +22 -0
  91. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/{Avatar.js.mustache → Avatar.jsx.mustache} +2 -0
  92. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/{Operator.js.mustache → Operator.jsx.mustache} +2 -1
  93. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/demo.stories.jsx.mustache +68 -0
  94. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/index.jsx.mustache +9 -9
  95. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/mock.stories.js.mustache +51 -0
  96. package/src/tasks/delete/helper.js +4 -0
  97. package/src/tasks/delete/index.js +4 -0
  98. package/src/tasks/delete-all/helper.js +175 -0
  99. package/src/tasks/delete-all/index.js +49 -0
  100. package/src/tasks/index.js +3 -0
  101. package/src/tasks/init/index.js +1 -1
  102. package/src/tasks/init/template/.eslintignore +8 -0
  103. package/src/tasks/init/template/.eslintrc.json +186 -5
  104. package/src/tasks/init/template/package.json.mustache +19 -4
  105. package/src/tasks/init/template/tasks.config.json +1 -0
  106. package/src/tasks/linter/index.js +46 -0
  107. package/src/tasks/list/index.js +4 -0
  108. package/src/tasks/publish/index.js +14 -1
  109. package/src/tasks/publish-all/helper.js +139 -0
  110. package/src/tasks/publish-all/index.js +84 -0
  111. package/src/util.js +10 -0
  112. package/src/tasks/create/templates/Constellation/Field/Picklist/picklist.js.mustache +0 -43
  113. package/src/tasks/create/templates/Constellation/Field/Text-Email/text-email.js.mustache +0 -43
  114. package/src/tasks/create/templates/Constellation/Field/Text-Input/text-input.js.mustache +0 -43
  115. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/text-paragraph.js.mustache +0 -43
  116. package/src/tasks/create/templates/Constellation/Field/Text-Phone/text-phone.js.mustache +0 -43
  117. package/src/tasks/create/templates/Constellation/Field/Text-URL/text-url.js.mustache +0 -172
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-undef */
1
2
  import { useState, useEffect, Fragment } from 'react';
2
3
  import {
3
4
  Link,
@@ -13,7 +14,7 @@ import {
13
14
  import { Glimpse } from '@pega/cosmos-react-work';
14
15
  import PropTypes from 'prop-types';
15
16
 
16
- import Avatar from './Avatar';
17
+ import Avatar from './Avatar.jsx';
17
18
 
18
19
  const Operator = (props) => {
19
20
  const { id, name, label, testId, helperText, externalUser, metaObj } = props;
@@ -0,0 +1,68 @@
1
+ import { withKnobs } from '@storybook/addon-knobs';
2
+
3
+ import {{COMPONENT_CLASS_NAME}} from './index.jsx';
4
+
5
+ import { configProps, operatorDetails } from './mock.stories';
6
+
7
+ export default {
8
+ title: '{{COMPONENT_CLASS_NAME}}',
9
+ decorators: [withKnobs],
10
+ component: {{COMPONENT_CLASS_NAME}}
11
+ };
12
+
13
+ if (!window.PCore) {
14
+ window.PCore = {};
15
+ }
16
+
17
+ window.PCore.getLocaleUtils = () => {
18
+ return {
19
+ getLocaleValue: value => {
20
+ return value;
21
+ }
22
+ };
23
+ };
24
+
25
+ window.PCore.getUserApi = () => {
26
+ return {
27
+ getOperatorDetails: () => {
28
+ return new Promise(resolve => {
29
+ resolve(operatorDetails);
30
+ });
31
+ }
32
+ };
33
+ };
34
+
35
+ export const base{{COMPONENT_CLASS_NAME}} = () => {
36
+
37
+ const props = {
38
+ label: configProps.label,
39
+ createLabel: configProps.createLabel,
40
+ updateLabel: configProps.updateLabel,
41
+ createOperator: configProps.createOperator,
42
+ updateOperator: configProps.updateOperator,
43
+ createDateTime: configProps.createDateTime,
44
+ updateDateTime: configProps.updateDateTime,
45
+ hideLabel: configProps.hideLabel,
46
+
47
+ getPConnect: () => {
48
+ return {
49
+ getActionsApi: () => {
50
+ return {
51
+ updateFieldValue: () => {},
52
+ triggerFieldChange: () => {}
53
+ };
54
+ },
55
+ ignoreSuggestion: () => {},
56
+ acceptSuggestion: () => {},
57
+ setInheritedProps: () => {},
58
+ resolveConfigProps: () => {}
59
+ };
60
+ }
61
+ };
62
+
63
+ return (
64
+ <>
65
+ <{{COMPONENT_CLASS_NAME}} {...props} />
66
+ </>
67
+ );
68
+ };
@@ -1,9 +1,10 @@
1
- import { Fragment, memo } from 'react';
1
+ /* eslint-disable no-nested-ternary */
2
+ import { Fragment } from 'react';
2
3
  import { DateTimeDisplay, Card, CardHeader, CardContent, Flex } from '@pega/cosmos-react-core';
3
4
  import PropTypes from 'prop-types';
4
5
 
5
6
  // includes in bundle
6
- import Operator from './Operator';
7
+ import Operator from './Operator.jsx';
7
8
 
8
9
  import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
9
10
 
@@ -27,8 +28,7 @@ export default function {{COMPONENT_CLASS_NAME}}(props) {
27
28
  resolveLabel,
28
29
  resolveOperator,
29
30
  resolveDateTime,
30
- hideLabel,
31
- defVal
31
+ hideLabel
32
32
  } = props;
33
33
 
34
34
 
@@ -84,13 +84,13 @@ export default function {{COMPONENT_CLASS_NAME}}(props) {
84
84
  resolveLabel: null,
85
85
  resolveOperator: null,
86
86
  resolveDateTime: null,
87
- hideLabel: false,
88
- defVal: '––'
87
+ hideLabel: false
89
88
  };
90
89
 
91
90
  {{COMPONENT_CLASS_NAME}}.propTypes = {
92
91
  getPConnect: PropTypes.func.isRequired,
93
92
  label: PropTypes.string,
93
+ title: PropTypes.string,
94
94
  createLabel: PropTypes.string,
95
95
  updateLabel: PropTypes.string,
96
96
  resolveLabel: PropTypes.string,
@@ -105,6 +105,6 @@ export default function {{COMPONENT_CLASS_NAME}}(props) {
105
105
 
106
106
  // as objects are there in props, shallow comparision fails & re-rendering of comp happens even with
107
107
  // same key value pairs in obj. hence using custom comparison function on when to re-render
108
- //const comparisonFn = (prevProps, nextProps) => {
109
- // return prevProps.updateDateTime === nextProps.updateDateTime;
110
- //};
108
+ // const comparisonFn = (prevProps, nextProps) => {
109
+ // return prevProps.updateDateTime === nextProps.updateDateTime;
110
+ // };
@@ -0,0 +1,51 @@
1
+ export const configProps = {
2
+ label: 'Create operator',
3
+ createLabel: 'Created',
4
+ updateLabel: 'Updated',
5
+ updateDateTime: '2023-01-16T14:53:33.280Z',
6
+ createDateTime: '2023-01-16T14:53:33.198Z',
7
+ updateOperator: {
8
+ userId: 'admin@mediaco',
9
+ userName: 'admin'
10
+ },
11
+ createOperator: {
12
+ userId: 'admin@mediaco',
13
+ userName: 'admin'
14
+ },
15
+ hideLabel: true,
16
+ key: '_532zx1dah',
17
+ displayMode: 'LABELS_LEFT'
18
+ };
19
+
20
+ export const operatorDetails = {
21
+ data: {
22
+ pzLoadTime: 'January 18, 2023 10:33:19 AM EST',
23
+ pzPageNameHash: '_pa1519192551088960pz',
24
+ pyOperatorInfo: {
25
+ pyUserName: 'french DigV2',
26
+ pyPosition: '',
27
+ pyImageInsKey: '',
28
+ pySkills: [
29
+ {
30
+ pySkillName: '',
31
+ pzIndexOwnerKey: 'DATA-ADMIN-OPERATOR-ID FRENCHTEST.DIGV2',
32
+ pySkillRating: 0
33
+ }
34
+ ],
35
+ pyReportToUserName: '',
36
+ pyReportTo: '',
37
+ pyOrganization: 'DXIL',
38
+ pyTitle: '',
39
+ pyLabel: 'frenchTest.DigV2',
40
+ pyEmailAddress: 'User@DigV2',
41
+ pyTelephone: ''
42
+ }
43
+ },
44
+ status: 200,
45
+ statusText: '',
46
+ headers: {
47
+ 'content-length': '435',
48
+ 'content-type': 'application/json;charset=UTF-8'
49
+ },
50
+ request: {}
51
+ };
@@ -13,6 +13,8 @@ import {
13
13
  } from '../../util.js';
14
14
  import { getComponentsFromServer } from '../list/helper.js';
15
15
 
16
+
17
+
16
18
  export const SOURCE_OF_COMPONENT_TYPES = {
17
19
  SERVER: 'Server',
18
20
  LOCAL: 'Local'
@@ -92,6 +94,8 @@ export const deleteServerComponents = async (sourceOfComponents, answers) => {
92
94
  choices: choicesArr
93
95
  });
94
96
  await deleteServerComponent(answers.componentToDelete);
97
+
98
+
95
99
  } else {
96
100
  console.log(chalk.bold.redBright(`No custom components in ${sourceOfComponents}`));
97
101
  }
@@ -9,6 +9,8 @@ import {
9
9
  getDeleteComponentsQuestions
10
10
  } from './helper.js';
11
11
 
12
+ import { showVersion } from '../../util.js';
13
+
12
14
  const deleteComponentsFn = async (sourceOfComponents, answers) => {
13
15
  switch (sourceOfComponents) {
14
16
  case SOURCE_OF_COMPONENT_TYPES.LOCAL: {
@@ -27,6 +29,8 @@ const deleteComponentsFn = async (sourceOfComponents, answers) => {
27
29
  };
28
30
 
29
31
  export default async options => {
32
+ showVersion();
33
+
30
34
  let sourceOfComponentsOption = SOURCE_OF_COMPONENT_TYPES.LOCAL;
31
35
  if (options.params[3] === SOURCE_OF_COMPONENT_TYPES.LOCAL) {
32
36
  sourceOfComponentsOption = options.params[3];
@@ -0,0 +1,175 @@
1
+ import chalk from 'chalk';
2
+ import inquirer from 'inquirer';
3
+ import ora from 'ora';
4
+
5
+ import { LIST_COMPONENT_SERVICE_REST_ENDPOINT } from '../../constants.js';
6
+ import {
7
+ constructCompleteUrl,
8
+ deleteLocalComponent,
9
+ deleteServerComponent,
10
+ getComponents,
11
+ getPegaServerConfig,
12
+ validateRulesetVersion,
13
+ nodeFetch
14
+ } from '../../util.js';
15
+ import { getComponentsFromServer } from '../list/helper.js';
16
+
17
+ export const SOURCE_OF_COMPONENT_TYPES = {
18
+ SERVER: 'Server',
19
+ LOCAL: 'Local'
20
+ };
21
+
22
+ export const getDeleteComponentsQuestions = async (options, sourceOfComponentsOption) => {
23
+ const defaultPegaServerConfig = await getPegaServerConfig();
24
+
25
+
26
+ return [
27
+ {
28
+ name: 'sourceOfComponents',
29
+ type: 'rawlist',
30
+ message: 'Delete components from Server or Local ?',
31
+ choices: Object.values(SOURCE_OF_COMPONENT_TYPES),
32
+ default: defaultPegaServerConfig.sourceOfComponents,
33
+ when() {
34
+ return !options.params[3];
35
+ }
36
+ }
37
+ ];
38
+ };
39
+
40
+
41
+
42
+ export const deleteLocalComponents = async sourceOfComponents => {
43
+ const localComponents = await getComponents();
44
+
45
+ for (var index in localComponents) {
46
+ console.log(chalk.bold.green(localComponents[index]));
47
+ }
48
+
49
+ if (localComponents.length > 0) {
50
+ const answers = await inquirer.prompt([
51
+
52
+ {
53
+ name: 'confirmDeletion',
54
+ type: 'confirm',
55
+ message: 'Delete all local ?',
56
+ default: false
57
+ }
58
+ ]);
59
+ if (answers.confirmDeletion) {
60
+ for (var index in localComponents) {
61
+ var componentToDelete = localComponents[index];
62
+ //console.log(chalk.bold.green("Deleting: " + componentToDelete));
63
+ await deleteLocalComponent(componentToDelete);
64
+ }
65
+ }
66
+ } else {
67
+ console.log(chalk.bold.redBright(`No custom components in ${sourceOfComponents}`));
68
+ }
69
+ };
70
+
71
+ export const deleteServerComponents = async (sourceOfComponents, answers) => {
72
+ const spinner = ora('Fetching components from server').start();
73
+ const data = await getComponentsFromServer(answers);
74
+ const defaultPegaConfig = await getPegaServerConfig();
75
+
76
+ const serverComponents = JSON.parse(data);
77
+ spinner.stop();
78
+ if (serverComponents && serverComponents.pxResults?.length > 0) {
79
+ const choicesArr = serverComponents.pxResults.map(({ label, pyRuleSet, pyRuleSetVersion }) => {
80
+ const name = `${standardizeStr(label, 45)} ${standardizeStr(pyRuleSet, 30)} ${standardizeStr(
81
+ pyRuleSetVersion,
82
+ 20
83
+ )}`;
84
+
85
+ const value = `${label}~|~${pyRuleSet}~|~${pyRuleSetVersion}`;
86
+ const short = `Selected component : ${chalk.redBright(
87
+ `${label} ${pyRuleSet} : ${pyRuleSetVersion}`
88
+ )}`;
89
+
90
+ return { name, value, short };
91
+ });
92
+
93
+ const selectedComp = await inquirer.prompt([
94
+ {
95
+ name: 'rulesetName',
96
+ message: 'Enter ruleset name',
97
+ default: defaultPegaConfig.rulesetName,
98
+ validate: value => {
99
+ if (value.trim()) {
100
+ return true;
101
+ }
102
+ return 'Ruleset name cannot be empty';
103
+ }
104
+ },
105
+ {
106
+ name: 'rulesetVersion',
107
+ message: 'Enter ruleset version',
108
+ default: defaultPegaConfig.rulesetVersion,
109
+ validate: value => {
110
+ if (validateRulesetVersion(value)) {
111
+ return true;
112
+ }
113
+ return 'Please provide compatible version e.g 01-01-01';
114
+ }
115
+ }
116
+ ]);
117
+
118
+ for (var index in choicesArr) {
119
+ var componentToDelete = choicesArr[index].value;
120
+ var arData = componentToDelete.split("~|~");
121
+ if (arData[1] == selectedComp.rulesetName && arData[2] == selectedComp.rulesetVersion) {
122
+ console.log(chalk.bold.green(arData[0]));
123
+ }
124
+ }
125
+
126
+
127
+ const answers = await inquirer.prompt([
128
+ {
129
+ name: 'confirmDeletion',
130
+ type: 'confirm',
131
+ message: 'Do you want to delete these components ?',
132
+ default: false
133
+ }
134
+ ]);
135
+ if (answers.confirmDeletion) {
136
+ for (var index in choicesArr) {
137
+ var componentToDelete = choicesArr[index].value;
138
+ var arData = componentToDelete.split("~|~");
139
+ if (arData[1] == selectedComp.rulesetName && arData[2] == selectedComp.rulesetVersion) {
140
+ await deleteServerComponent(componentToDelete);
141
+ }
142
+ }
143
+ }
144
+
145
+ /*
146
+ const answers = await inquirer.prompt({
147
+ name: 'componentToDelete',
148
+ type: 'rawlist',
149
+ pageSize: 10,
150
+ message: `Select component to delete \n ${standardizeStr('Rule name', 48)} ${standardizeStr(
151
+ 'Ruleset name',
152
+ 30
153
+ )} ${standardizeStr('Ruleset version', 22)}`,
154
+ choices: choicesArr
155
+ });
156
+ */
157
+
158
+
159
+
160
+ /*
161
+ await deleteServerComponent(answers.componentToDelete);
162
+ await deleteFromComponentMap(answers.componentToDelete.split("~")[0]);
163
+ */
164
+
165
+ } else {
166
+ console.log(chalk.bold.redBright(`No custom components in ${sourceOfComponents}`));
167
+ }
168
+ };
169
+
170
+ export const standardizeStr = (str, leng) => {
171
+ for (let i = str.length; i <= leng; i++) {
172
+ str += ' ';
173
+ }
174
+ return str;
175
+ };
@@ -0,0 +1,49 @@
1
+ import inquirer from 'inquirer';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+
5
+ import {
6
+ deleteLocalComponents,
7
+ SOURCE_OF_COMPONENT_TYPES,
8
+ deleteServerComponents,
9
+ getDeleteComponentsQuestions
10
+ } from './helper.js';
11
+
12
+ import { showVersion } from '../../util.js';
13
+
14
+ const deleteComponentsFn = async (sourceOfComponents, answers) => {
15
+ switch (sourceOfComponents) {
16
+ case SOURCE_OF_COMPONENT_TYPES.LOCAL: {
17
+ await deleteLocalComponents(sourceOfComponents);
18
+ break;
19
+ }
20
+ case SOURCE_OF_COMPONENT_TYPES.SERVER: {
21
+ await deleteServerComponents(sourceOfComponents, answers);
22
+ break;
23
+ }
24
+ default: {
25
+ console.log('Source of components needs to be either Local or Server');
26
+ break;
27
+ }
28
+ }
29
+ };
30
+
31
+ export default async options => {
32
+ showVersion();
33
+
34
+ let sourceOfComponentsOption = SOURCE_OF_COMPONENT_TYPES.LOCAL;
35
+ if (options.params[3] === SOURCE_OF_COMPONENT_TYPES.LOCAL) {
36
+ sourceOfComponentsOption = options.params[3];
37
+ await deleteComponentsFn(sourceOfComponentsOption);
38
+ } else if (options.params[3] === SOURCE_OF_COMPONENT_TYPES.SERVER) {
39
+ sourceOfComponentsOption = options.params[3];
40
+ const questions = await getDeleteComponentsQuestions(options, sourceOfComponentsOption);
41
+ const answers = await inquirer.prompt(questions);
42
+ await deleteComponentsFn(sourceOfComponentsOption, answers);
43
+ } else {
44
+ const questions = await getDeleteComponentsQuestions(options);
45
+ const answers = await inquirer.prompt(questions);
46
+ const { sourceOfComponents } = answers;
47
+ await deleteComponentsFn(sourceOfComponents, answers);
48
+ }
49
+ };
@@ -1,9 +1,12 @@
1
1
  export { default as createComponent } from './create/index.js';
2
2
  export { default as deleteComponent } from './delete/index.js';
3
+ export { default as deleteAllComponents } from './delete-all/index.js';
3
4
  export { default as initProject } from './init/index.js';
4
5
  export { default as publishComponent } from './publish/index.js';
6
+ export { default as publishAllComponents } from './publish-all/index.js';
5
7
  export { default as listComponents } from './list/index.js';
6
8
  export { default as updateComponent } from './update/index.js';
7
9
  export { default as validate } from './validator/index.js';
8
10
  export { default as authenticate } from './authenticate/index.js';
9
11
  export { default as upgrade } from './upgrade/index.js';
12
+ export { default as buildComponent } from './build/index.js';
@@ -123,7 +123,7 @@ export default async options => {
123
123
  },
124
124
  {
125
125
  title: installDependenciesText,
126
- task: () => execPromise('npm i --production=false', { cwd: options.targetDirectory })
126
+ task: () => execPromise('npm i --force --production=false', { cwd: options.targetDirectory })
127
127
  }
128
128
  ],
129
129
  {
@@ -0,0 +1,8 @@
1
+ webpack.config.js
2
+ src/helpers/config_access.js
3
+ *.html
4
+ *.css
5
+ *.json
6
+ *.md
7
+ *.svg
8
+ *.zip
@@ -1,10 +1,191 @@
1
1
  {
2
- "extends": ["@pega"],
3
- "parserOptions": { "project": "tsconfig.json" },
4
2
  "root": true,
5
- "ignorePatterns": ["node_modules", "lib", "!.storybook", ".storybook/public"],
3
+ "extends": ["@pega"],
4
+ "parserOptions": {
5
+ "project": "tsconfig.json",
6
+ "ecmaVersion": 13
7
+ },
8
+ "settings": {
9
+ "import/resolver": {
10
+ "typescript": {},
11
+ "node": {
12
+ "extensions": [".js", ".jsx"]
13
+ }
14
+ },
15
+ "react": {
16
+ "version": "detect"
17
+ }
18
+ },
19
+ "ignorePatterns": ["node_modules", "packages/*/lib", "!.storybook", ".storybook/public"],
6
20
  "rules": {
21
+ // Prettier recommends running separately from a linter.
22
+ // https://prettier.io/docs/en/integrating-with-linters.html#notes
7
23
  "prettier/prettier": "off",
8
- "react/react-in-jsx-scope": "off"
9
- }
24
+
25
+ // Disable rules from shared configs we're not ready for yet.
26
+ "sonarjs/cognitive-complexity": "off",
27
+ "sonarjs/no-identical-functions": "off",
28
+ "sonarjs/no-duplicate-string": "off",
29
+ "sonarjs/no-nested-template-literals": "off",
30
+
31
+ //
32
+ // JA - Override some default lint handling here
33
+ "@typescript-eslint/array-type": ["error", { "default": "generic" }],
34
+ // "import/extensions": ["warn", "never"], // Turning off for now (see below)
35
+
36
+ //
37
+ // Initial release: turning these off; phase in to "warn" or "error" over time
38
+ // For "quotes" and "@typescript-eslint/quotes", see override below for .ts/.tsx files
39
+ "import/extensions": ["off", "never"],
40
+ "import/named": "off",
41
+ "import/no-cycle": "off",
42
+ "import/no-duplicates": "off",
43
+ "import/no-extraneous-dependencies": "off",
44
+ "import/no-named-as-default": "off",
45
+ "import/no-named-as-default-member": "off",
46
+ "import/no-self-import": "off",
47
+ "import/no-unresolved": "off",
48
+ "import/no-useless-path-segments": "off",
49
+ "import/order": "off",
50
+
51
+ "no-else-return": "off",
52
+ "no-restricted-syntax": "off",
53
+ "no-underscore-dangle": "off",
54
+
55
+ "jsx-a11y/alt-text": "off",
56
+ "jsx-a11y/anchor-is-valid": "off",
57
+ "jsx-a11y/click-events-have-key-events": "off",
58
+ "jsx-a11y/label-has-associated-control": "off",
59
+ "jsx-a11y/no-static-element-interactions": "off",
60
+
61
+ "react/jsx-fragments": "off",
62
+ "react/jsx-no-bind": "off",
63
+ "react/self-closing-comp": "off",
64
+
65
+ "sonarjs/prefer-immediate-return": "off",
66
+
67
+ "@typescript-eslint/dot-notation": "off", // prefer warn but needs different parserOptions
68
+ "@typescript-eslint/naming-convention": "off", // prefer warn but needs different parserOptions
69
+ "@typescript-eslint/ban-types": "off", // also, see override below
70
+
71
+ //
72
+ // Initial release: set to error
73
+ "@typescript-eslint/no-inferrable-types": "error",
74
+ "eqeqeq": "error",
75
+ "no-alert": "error",
76
+ "no-console": "error",
77
+ "no-fallthrough": "error",
78
+ "no-undef": "error",
79
+ "no-unused-vars": "error",
80
+ "no-var": "error",
81
+ "prefer-const": "error",
82
+ "yoda": "error",
83
+
84
+ "import/no-mutable-exports": "error",
85
+ "sonarjs/max-switch-cases": "error",
86
+ "sonarjs/no-collapsible-if": "error",
87
+ "sonarjs/no-all-duplicated-branches": "error",
88
+ "sonarjs/no-duplicated-branches": "error",
89
+ "sonarjs/no-gratuitous-expressions": "error",
90
+ "sonarjs/no-ignored-return": "error",
91
+ "sonarjs/no-small-switch": "error",
92
+ "sonarjs/prefer-object-literal": "error",
93
+ "sonarjs/prefer-single-boolean-return": "error",
94
+ "@typescript-eslint/no-shadow": "error",
95
+ "react/default-props-match-prop-types": "error",
96
+ "react/no-unescaped-entities": "error",
97
+ "react/no-unused-prop-types": "error",
98
+ "react/static-property-placement": "error",
99
+ "array-callback-return": "error",
100
+ "camelcase": "error",
101
+ "default-case": "error",
102
+ "func-names": "error",
103
+ "no-case-declarations": "error",
104
+ "no-lonely-if": "error",
105
+ "no-nested-ternary": "error",
106
+ "no-plusplus": "error",
107
+ "no-restricted-globals": "error",
108
+ "no-restricted-properties": "error",
109
+ "no-shadow": "error",
110
+ "radix": "error",
111
+ "spaced-comment": "error",
112
+
113
+ "import/newline-after-import": "error",
114
+ "sonarjs/no-nested-switch": "error",
115
+ "@typescript-eslint/no-array-constructor": "error",
116
+ "@typescript-eslint/no-empty-function": "error",
117
+ "@typescript-eslint/no-unused-vars": "error",
118
+ "@typescript-eslint/no-useless-constructor": "error",
119
+ "react/button-has-type": "error",
120
+ "react/jsx-curly-brace-presence": "error",
121
+ "react/jsx-boolean-value": "error",
122
+ "react/no-array-index-key": "error",
123
+ "class-methods-use-this": "error",
124
+ "guard-for-in": "error",
125
+ "no-unneeded-ternary": "error",
126
+ "no-unused-expressions": "error",
127
+ "operator-assignment": "error",
128
+ "prefer-template": "error",
129
+ "vars-on-top": "error",
130
+
131
+ "no-use-before-define": "off", // doc for @typescript-eslint/no-use-before-define says to turn off the base implementation
132
+ "@typescript-eslint/no-use-before-define": "error"
133
+ },
134
+ "overrides": [
135
+ {
136
+ "files": "*.@(ts|tsx)",
137
+ "rules": {
138
+ "@typescript-eslint/method-signature-style": ["error", "property"],
139
+ // "@typescript-eslint/ban-types": [
140
+ // "warn",
141
+ // {
142
+ // "types": {
143
+ // "Omit": "Please use the 'OmitStrict' type from 'src/types/' instead.",
144
+ // "object": false,
145
+ // "Function": false
146
+ // },
147
+ // "extendDefaults": true
148
+ // }
149
+ // ],
150
+
151
+ "quotes": "off",
152
+ "@typescript-eslint/quotes": "off"
153
+ // [
154
+ // "error",
155
+ // "single",
156
+ // {
157
+ // "avoidEscape": true,
158
+ // "allowTemplateLiterals": false
159
+ // }
160
+ // ]
161
+ }
162
+ },
163
+ {
164
+ "files": "*.@(jsx|tsx|mdx)",
165
+ "rules": {
166
+ "react/react-in-jsx-scope": "off",
167
+ // Set up configuration for future sweep
168
+ "react-hooks/exhaustive-deps": [
169
+ "off",
170
+ {
171
+ "additionalHooks": "useAfterInitialEffect"
172
+ }
173
+ ]
174
+ }
175
+ },
176
+ {
177
+ "files": "*.@(js|jsx|ts|tsx|mdx)",
178
+ "rules": {}
179
+ },
180
+ {
181
+ "files": ".storybook/*.js",
182
+ "extends": ["@pega/eslint-config/script"]
183
+ },
184
+ {
185
+ "files": "*/**/mocks/**.@(mocks|styles).@(tsx|ts)",
186
+ "rules": {
187
+ "import/prefer-default-export": ["off"]
188
+ }
189
+ }
190
+ ]
10
191
  }