@paro.io/expert-shared-components 1.8.0 → 1.8.2

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.
@@ -123,7 +123,7 @@ const NetworkSection = ({ handleScrollToBottom, preferenceTasks, isWhiteLabel, d
123
123
  react_1.default.createElement(core_1.Divider, null)),
124
124
  vanityTitle && react_1.default.createElement(react_1.default.Fragment, null,
125
125
  react_1.default.createElement(core_1.Box, { ml: 1, display: "flex", justifyContent: "space-between", alignItems: "center", "data-testid": "Matching-Id", style: { marginRight: '10px' } },
126
- react_1.default.createElement(core_1.Typography, { variant: "body2" }, "Expertise as a "),
126
+ react_1.default.createElement(core_1.Typography, { variant: "body2", style: { marginRight: '20px' } }, "Expertise as a "),
127
127
  react_1.default.createElement("b", null, vanityTitle),
128
128
  !isInternal && react_1.default.createElement(core_1.IconButton, { onClick: () => { setOpenModal(true); } },
129
129
  react_1.default.createElement(icons_1.Cached, null))),
@@ -4,7 +4,6 @@ type ServiceLinesTemplateProps = {
4
4
  createOrUpdateRates?: any;
5
5
  updateExpert?: any;
6
6
  openServiceLinesTemplate?: boolean;
7
- setOpenServiceLinesTemplate?: any;
8
7
  getRatesByExpertId?: any;
9
8
  setView?: any;
10
9
  getServiceLines?: any;
@@ -17,6 +16,7 @@ type ServiceLinesTemplateProps = {
17
16
  isInternalProfile?: boolean;
18
17
  updateFreelancerPreferences?: any;
19
18
  getExpertVanityTitles?: any;
19
+ reactAppUrl: string;
20
20
  };
21
- export declare const ServiceLinesTemplate: ({ getFreelancerDataResult, createOrUpdateRates, getRatesByExpertId, updateExpert, openServiceLinesTemplate, setOpenServiceLinesTemplate, getServiceLines, legacyFreelancerId, expertId, isFirmProfile, serviceLineData, selectedServicesList, isInternalProfile, updateFreelancerPreferences, getExpertVanityTitles, }: ServiceLinesTemplateProps) => false | React.JSX.Element | undefined;
21
+ export declare const ServiceLinesTemplate: ({ getFreelancerDataResult, createOrUpdateRates, getRatesByExpertId, updateExpert, openServiceLinesTemplate, getServiceLines, legacyFreelancerId, expertId, isFirmProfile, serviceLineData, selectedServicesList, isInternalProfile, updateFreelancerPreferences, getExpertVanityTitles, reactAppUrl, }: ServiceLinesTemplateProps) => false | React.JSX.Element | undefined;
22
22
  export {};
@@ -39,22 +39,31 @@ const icons_1 = require("@material-ui/icons");
39
39
  const ReviewsTab_1 = require("../ReviewsTab/ReviewsTab");
40
40
  const base_ui_1 = require("@paro.io/base-ui");
41
41
  const utils_1 = require("../shared/utils");
42
- const lab_1 = require("@material-ui/lab");
43
42
  const react_hot_toast_1 = require("react-hot-toast");
44
- const ServiceLinesTemplate = ({ getFreelancerDataResult, createOrUpdateRates, getRatesByExpertId, updateExpert, openServiceLinesTemplate, setOpenServiceLinesTemplate, getServiceLines, legacyFreelancerId, expertId, isFirmProfile, serviceLineData, selectedServicesList = [], isInternalProfile = false, updateFreelancerPreferences, getExpertVanityTitles, }) => {
43
+ const ServiceLinesTemplate = ({ getFreelancerDataResult, createOrUpdateRates, getRatesByExpertId, updateExpert, openServiceLinesTemplate, getServiceLines, legacyFreelancerId, expertId, isFirmProfile, serviceLineData, selectedServicesList = [], isInternalProfile = false, updateFreelancerPreferences, getExpertVanityTitles, reactAppUrl, }) => {
45
44
  const [selectedServices, dispatch] = (0, react_1.useReducer)(utils_1.selectedServicesReducer, selectedServicesList);
46
45
  const [updateClicked, setUpdateClicked] = (0, react_1.useState)(false);
47
- const [loading, setLoading] = (0, react_1.useState)(false);
46
+ const [loading, setLoading] = (0, react_1.useState)(true);
48
47
  const [serviceLines, setServiceLines] = (0, react_1.useState)(serviceLineData);
49
48
  const [currentServiveRate, setCurrentServiceRate] = (0, react_1.useState)(null);
50
49
  const [value, setValue] = (0, react_1.useState)(0);
51
50
  const [titleOptions, setTitleOptions] = (0, react_1.useState)([]);
52
51
  const [selectedTitle, setSelectedTitle] = (0, react_1.useState)(null);
53
52
  const [customTitle, setCustomTitle] = (0, react_1.useState)(null);
53
+ const [expandedServices, setExpandedServices] = (0, react_1.useState)(new Map());
54
+ const [currentFeatureStatus, setCurrentFeatureStatus] = (0, react_1.useState)({});
55
+ const [disablePublicProfile, setDisablePublicProfile] = (0, react_1.useState)(true);
56
+ const handleExpandToggle = (serviceTitle) => {
57
+ setExpandedServices(prev => {
58
+ const updatedState = new Map(prev);
59
+ const currentExpandedState = updatedState.get(serviceTitle) || false;
60
+ updatedState.set(serviceTitle, !currentExpandedState);
61
+ return updatedState;
62
+ });
63
+ };
54
64
  const fetchServiceLineData = () => __awaiter(void 0, void 0, void 0, function* () {
55
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
65
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
56
66
  try {
57
- setLoading(true);
58
67
  if (!isInternalProfile) {
59
68
  const [expertVanityTitles] = yield Promise.all([
60
69
  getExpertVanityTitles({ fetchPolicy: 'network-only' }),
@@ -73,7 +82,9 @@ const ServiceLinesTemplate = ({ getFreelancerDataResult, createOrUpdateRates, ge
73
82
  const expertRates = (_j = ratesResponse === null || ratesResponse === void 0 ? void 0 : ratesResponse.data) === null || _j === void 0 ? void 0 : _j.getRatesByExpertId;
74
83
  setCurrentServiceRate(currentRate);
75
84
  const isTitleExists = (_l = (_k = freelancerResponse === null || freelancerResponse === void 0 ? void 0 : freelancerResponse.data) === null || _k === void 0 ? void 0 : _k.getExpertByLegacyFreelancerId) === null || _l === void 0 ? void 0 : _l.vanityTitle;
76
- isTitleExists ? setSelectedTitle(isTitleExists) : setValue(1);
85
+ const featureStatus = (_o = (_m = freelancerResponse === null || freelancerResponse === void 0 ? void 0 : freelancerResponse.data) === null || _m === void 0 ? void 0 : _m.getExpertByLegacyFreelancerId) === null || _o === void 0 ? void 0 : _o.featureStatus;
86
+ setCurrentFeatureStatus(featureStatus);
87
+ isTitleExists && setSelectedTitle(isTitleExists);
77
88
  dispatch({
78
89
  currentService,
79
90
  currentRate,
@@ -143,6 +154,7 @@ const ServiceLinesTemplate = ({ getFreelancerDataResult, createOrUpdateRates, ge
143
154
  });
144
155
  }).finally(() => {
145
156
  setUpdateClicked(false);
157
+ setDisablePublicProfile(false);
146
158
  });
147
159
  });
148
160
  const handleUpdateProfile = () => __awaiter(void 0, void 0, void 0, function* () {
@@ -172,16 +184,18 @@ const ServiceLinesTemplate = ({ getFreelancerDataResult, createOrUpdateRates, ge
172
184
  console.log('DB Updation failed: ', error.message);
173
185
  }
174
186
  finally {
175
- setOpenServiceLinesTemplate && setOpenServiceLinesTemplate(false);
187
+ setUpdateClicked(false);
188
+ setValue(1);
176
189
  }
177
190
  ;
178
191
  });
179
192
  const updateFeatureStatus = () => {
193
+ const updateFeatureStatus = Object.assign(Object.assign({}, currentFeatureStatus), { serviceLines: true });
180
194
  updateExpert({
181
195
  variables: {
182
196
  expertId: expertId,
183
197
  input: {
184
- featureStatus: { "serviceLines": true }
198
+ featureStatus: updateFeatureStatus
185
199
  }
186
200
  },
187
201
  }).then(() => {
@@ -198,14 +212,11 @@ const ServiceLinesTemplate = ({ getFreelancerDataResult, createOrUpdateRates, ge
198
212
  message: 'Update failed!',
199
213
  icon: 'warning'
200
214
  });
201
- console.log('DB Updation failed : ', error.message);
202
215
  }).finally(() => {
203
- setOpenServiceLinesTemplate && setOpenServiceLinesTemplate(false);
216
+ setUpdateClicked(false);
217
+ setValue(1);
204
218
  });
205
219
  };
206
- const handleNotInterestedClick = () => __awaiter(void 0, void 0, void 0, function* () {
207
- yield updateFeatureStatus();
208
- });
209
220
  const isUpdateButtonDisabled = () => {
210
221
  if ((selectedServices === null || selectedServices === void 0 ? void 0 : selectedServices.length) === 0)
211
222
  return true;
@@ -229,110 +240,129 @@ const ServiceLinesTemplate = ({ getFreelancerDataResult, createOrUpdateRates, ge
229
240
  type: 'update'
230
241
  });
231
242
  };
232
- const handleChange = (event, newValue) => {
233
- if (newValue >= 0) {
234
- setValue(newValue);
235
- }
236
- };
237
243
  const handleChangeTitle = (event) => {
238
244
  setSelectedTitle(event.target.value);
239
245
  };
240
- const ActionButtons = () => {
241
- return react_1.default.createElement(core_1.Grid, { container: true, direction: "row", justifyContent: "space-evenly", style: { marginTop: 12 }, spacing: 1 },
242
- react_1.default.createElement(base_ui_1.Button, { label: "UPDATE PROFILE", onClick: value === 1 ? handleUpdateExpertTitle : handleUpdateProfile, type: "button", isLoading: updateClicked, disabled: isUpdateButtonDisabled(), color: "primary" }),
243
- react_1.default.createElement(base_ui_1.Button, { label: "NOT INTERESTED", onClick: handleNotInterestedClick, type: "button", disabled: updateClicked, isLoading: updateClicked }));
244
- };
245
- const ServiceLinesTab = () => {
246
- return (react_1.default.createElement(react_1.default.Fragment, null,
247
- react_1.default.createElement(core_1.Grid, { style: { backgroundColor: '#132f4a', padding: 12 }, className: "service-lines-header" },
248
- react_1.default.createElement(core_1.Typography, { className: "headerTop", variant: "h5", style: { color: '#ffffff', fontWeight: 500, padding: 12, justifyContent: 'space-between', display: 'flex', alignItems: 'center' } },
249
- "Expand Your Expertise: Add More Services to Your Profile",
250
- react_1.default.createElement("img", { src: 'https://expert-files-dev.s3.us-east-1.amazonaws.com/ParoGroupLogo.png', alt: "Paro Group Logo", style: { width: 24, height: 24, marginLeft: 8 } })),
251
- react_1.default.createElement(core_1.Typography, { className: "headerMiddle", style: { color: '#ffffff', fontWeight: 200, fontStyle: 'italic', paddingLeft: 12 } }, "Why Add More Services?"),
252
- react_1.default.createElement(core_1.Grid, { container: true, spacing: 3, style: { padding: 12, color: '#ffffff' }, direction: "row", justifyContent: "flex-start", alignItems: "center" }, utils_1.features.map((feature, index) => (react_1.default.createElement(core_1.Box, { key: index, display: "flex", alignItems: "center", m: 2 },
253
- react_1.default.createElement(icons_1.AdjustRounded, { style: {
254
- marginRight: 8,
255
- color: '#2A9D8F',
256
- fontSize: 20
257
- }, className: "headerCircle" }),
258
- react_1.default.createElement(core_1.Typography, { className: "headerFeature", variant: "body2", style: { color: '#ffffff' } }, feature)))))),
259
- react_1.default.createElement(core_1.Grid, { container: true, style: { padding: 4 } },
260
- react_1.default.createElement(core_1.Typography, { variant: "h6", style: { marginLeft: 20, fontWeight: 500 } }, "Select from the following service lines:"),
261
- react_1.default.createElement(core_1.Grid, { container: true, direction: "row", justifyContent: "space-evenly", alignItems: "center" }, services === null || services === void 0 ? void 0 :
262
- services.map((service, index) => {
263
- const serviceExistsInArray = selectedServices.find((svc) => svc.service === service.title);
264
- return (react_1.default.createElement(core_1.Grid, { item: true, xs: 12, md: 5, key: index, style: { margin: 12 } },
265
- react_1.default.createElement(core_1.Box, { sx: { display: "flex" } },
266
- react_1.default.createElement(core_1.Box, { display: 'flex', alignItems: 'center' },
267
- react_1.default.createElement(CustomCheckbox, { checked: serviceExistsInArray, disabled: serviceExistsInArray === null || serviceExistsInArray === void 0 ? void 0 : serviceExistsInArray.currentService, onChange: () => handleServiceToggle(service.title) })),
268
- react_1.default.createElement(core_1.Box, { sx: { flex: 1 } },
269
- react_1.default.createElement(core_1.Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 2 } },
270
- react_1.default.createElement(core_1.Box, null,
271
- react_1.default.createElement(core_1.Typography, { component: "div", style: { fontWeight: 300, fontSize: 16 } },
272
- service.title,
273
- (serviceExistsInArray === null || serviceExistsInArray === void 0 ? void 0 : serviceExistsInArray.currentService) && (react_1.default.createElement(core_1.Typography, { variant: "caption", style: { fontWeight: 400, fontSize: 16 } }, "\u00A0(current service line)"))),
274
- react_1.default.createElement(core_1.Typography, { variant: "body2", style: { fontWeight: 50, fontSize: 14 } }, service.description)),
275
- react_1.default.createElement(core_1.Box, { display: 'flex', alignItems: 'center', ml: 4 },
276
- react_1.default.createElement(core_1.TextField, { size: "small", variant: "outlined", value: (serviceExistsInArray === null || serviceExistsInArray === void 0 ? void 0 : serviceExistsInArray.rate) || '', onChange: (e) => handlePriceChange(service.title, e.target.value ? parseInt(e.target.value) : 0, serviceExistsInArray === null || serviceExistsInArray === void 0 ? void 0 : serviceExistsInArray.currentService), InputProps: {
277
- startAdornment: react_1.default.createElement(core_1.Typography, null, "$\u00A0"),
278
- endAdornment: react_1.default.createElement(core_1.Typography, null, "\u00A0/hr"),
279
- }, style: { width: 100 }, required: serviceExistsInArray, error: serviceExistsInArray && !serviceExistsInArray.rate, label: "Rate", className: "serviceLineRateInput" })))))));
280
- }),
281
- react_1.default.createElement(core_1.Grid, { item: true, xs: 12, md: 5, style: { margin: 5 } }, ActionButtons())))));
246
+ const ActionButtons = (disabled) => {
247
+ return react_1.default.createElement(core_1.Grid, { container: true, direction: "row", justifyContent: "space-evenly", style: { margin: 'auto' }, spacing: 2 },
248
+ react_1.default.createElement(base_ui_1.Button, { label: "PREVIEW PUBLIC PROFILE", onClick: () => window.open(`${reactAppUrl}/public/${legacyFreelancerId}`, '_blank'), type: "button", disabled: disabled, isLoading: updateClicked }),
249
+ react_1.default.createElement(base_ui_1.Button, { label: "UPDATE PROFILE", onClick: handleUpdateExpertTitle, type: "button", isLoading: updateClicked, disabled: isUpdateButtonDisabled(), color: "primary" }));
282
250
  };
283
- const VanityTitlesTab = () => {
251
+ const newServiceLine = () => {
284
252
  var _a;
285
- return react_1.default.createElement(core_1.Grid, { container: true, item: true, direction: "row", spacing: 1 },
286
- react_1.default.createElement(core_1.Grid, { style: { backgroundColor: '#132f4a', padding: 12 }, xs: 12, sm: 6 },
287
- react_1.default.createElement(core_1.Typography, { className: "headerTop", variant: "h5", style: { color: 'white', fontWeight: 500, padding: 12, justifyContent: 'space-between', display: 'flex', alignItems: 'center' } },
288
- "Make your new identity standout",
289
- react_1.default.createElement("img", { src: 'https://expert-files-dev.s3.us-east-1.amazonaws.com/ParoGroupLogo.png', alt: "Paro Group Logo", style: { width: 24, height: 24, marginLeft: 8 } })),
290
- react_1.default.createElement(core_1.Typography, { className: "headerMiddle", style: { color: '#ffffff', fontWeight: 200, fontStyle: 'italic', paddingLeft: 12 } }, "Why Add a Job Title to Your Profile?"),
291
- react_1.default.createElement(core_1.Grid, { container: true, spacing: 3, style: { padding: 12 }, direction: "row", justifyContent: "flex-start", alignItems: "center" }, utils_1.titleFeatures.map((feature, index) => {
292
- const [boldText, text] = feature.split(':');
293
- return react_1.default.createElement(core_1.Box, { key: index, display: "flex", alignItems: "center", m: 2 },
294
- react_1.default.createElement(icons_1.AdjustRounded, { style: {
295
- marginRight: 8,
296
- color: '#2A9D8F',
297
- fontSize: 20
298
- }, className: "headerCircle" }),
299
- react_1.default.createElement(core_1.Typography, { className: "headerFeature", variant: "body2", style: { color: '#a5b1bc' } },
300
- react_1.default.createElement("strong", { className: "text-[#f1f1f1]" },
301
- boldText,
302
- ":"),
303
- text));
304
- }))),
305
- react_1.default.createElement(core_1.Grid, { xs: 12, sm: 6, style: { paddingLeft: 18 }, container: true, direction: "column", justifyContent: "center", alignItems: "center" },
306
- react_1.default.createElement(core_1.Box, null,
307
- react_1.default.createElement(core_1.Typography, { variant: "h5", style: { fontWeight: 500 } }, "Expertise Title")),
308
- react_1.default.createElement(core_1.Grid, { item: true, style: { marginBottom: 12, width: '70%' } },
309
- react_1.default.createElement(core_1.Select, { required: true, autoWidth: false, variant: "outlined", fullWidth: true, defaultValue: titleOptions, onChange: (event) => handleChangeTitle(event), value: selectedTitle !== null && selectedTitle !== void 0 ? selectedTitle : (_a = titleOptions[0]) === null || _a === void 0 ? void 0 : _a.title },
310
- titleOptions.length > 1 && (react_1.default.createElement(core_1.MenuItem, { disabled: true, value: "" },
311
- react_1.default.createElement("em", null, "Select title"))),
312
- titleOptions.map((option) => (react_1.default.createElement(core_1.MenuItem, { key: option.id, value: option.title }, option.title))),
313
- react_1.default.createElement(core_1.MenuItem, { value: "Other" },
314
- react_1.default.createElement("em", null, "Other")))),
315
- selectedTitle === 'Other' && react_1.default.createElement(core_1.Grid, { item: true, style: { width: '70%' } },
316
- react_1.default.createElement(core_1.TextField, { size: "small", variant: "outlined", value: customTitle, fullWidth: true, onChange: (e) => { setCustomTitle(e.target.value); }, placeholder: "Enter custom title" })),
317
- ActionButtons()));
253
+ return (react_1.default.createElement(core_1.Grid, { container: true, item: true, direction: "column", justifyContent: "center" },
254
+ (value === 0 || isInternalProfile) ?
255
+ react_1.default.createElement(core_1.Grid, { container: true, className: "service-lines-header", direction: "column", justifyContent: "center" },
256
+ react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justifyContent: "space-between", alignItems: "flex-start" },
257
+ react_1.default.createElement(core_1.Grid, { item: true, direction: "column", justifyContent: "flex-start" },
258
+ react_1.default.createElement(core_1.Typography, { variant: "h6", style: { color: '#12756F', fontSize: '24px', fontWeight: 600 } }, "Expand Your Expertise"),
259
+ react_1.default.createElement(core_1.Typography, { variant: "body2", style: { color: '#1C1F2B', fontSize: '16px', fontWeight: 600 } }, "Step 1: Add more services to your profile to stand out")),
260
+ react_1.default.createElement(core_1.Grid, { item: true, style: { backgroundColor: '#0E3435', color: '#ffffff', borderRadius: '20px', padding: '6px 20px' } },
261
+ "Step ",
262
+ value + 1,
263
+ " of 2")),
264
+ react_1.default.createElement(core_1.Grid, { container: true, item: true, direction: "column", justifyContent: "center", alignItems: "center" },
265
+ react_1.default.createElement(core_1.Typography, { variant: "subtitle1", style: { textDecoration: 'underline', fontStyle: 'italic', fontSize: '18px', fontWeight: 400, marginTop: '8px', marginBottom: '8px' } }, "Why Add More Services?")),
266
+ react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justifyContent: "space-between", alignItems: "center", xs: 10, style: { margin: 'auto' } },
267
+ react_1.default.createElement(core_1.Box, { display: "flex", flexDirection: "row", alignItems: "center", width: '50%' },
268
+ react_1.default.createElement(icons_1.AdjustRounded, { style: {
269
+ marginRight: 8,
270
+ color: '#248384',
271
+ fontSize: '20px'
272
+ }, className: "headerCircle" }),
273
+ react_1.default.createElement(core_1.Typography, { className: "headerFeature", variant: "body2", style: { fontSize: '16px', fontWeight: 400 } }, "Increase your visibility to clients searching for diverse expertise")),
274
+ react_1.default.createElement(core_1.Box, { display: "flex", flexDirection: "row", alignItems: "center", width: '50%' },
275
+ react_1.default.createElement(icons_1.AdjustRounded, { style: {
276
+ marginRight: 8,
277
+ color: '#248384',
278
+ fontSize: '20px'
279
+ }, className: "headerCircle" }),
280
+ react_1.default.createElement(core_1.Typography, { className: "headerFeature", variant: "body2", style: { fontSize: '16px', fontWeight: 400 } }, "Position yourself as a versatile professional"))),
281
+ react_1.default.createElement(core_1.Grid, { item: true, container: true, style: { marginTop: '16px' } },
282
+ react_1.default.createElement(core_1.Typography, { variant: "h6", style: { fontSize: '16px', fontWeight: 600 } }, "Add Service Lines to your profile:"),
283
+ react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justifyContent: "space-evenly", alignItems: "center" }, services === null || services === void 0 ? void 0 : services.map((service, index) => {
284
+ const serviceExistsInArray = selectedServices.find((svc) => svc.service === service.title);
285
+ const isExpanded = expandedServices.get(service.title) || false;
286
+ return (react_1.default.createElement(core_1.Grid, { item: true, xs: 12, key: index, style: { margin: 4 } },
287
+ react_1.default.createElement(core_1.Box, { sx: { display: "flex" } },
288
+ react_1.default.createElement(core_1.Box, { display: 'flex', alignItems: 'center' },
289
+ react_1.default.createElement(CustomCheckbox, { checked: serviceExistsInArray, disabled: serviceExistsInArray === null || serviceExistsInArray === void 0 ? void 0 : serviceExistsInArray.currentService, onChange: () => handleServiceToggle(service.title) })),
290
+ react_1.default.createElement(core_1.Box, { sx: { flex: 1 } },
291
+ react_1.default.createElement(core_1.Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center" } },
292
+ react_1.default.createElement(core_1.Box, { display: 'flex', alignItems: 'center' },
293
+ react_1.default.createElement(core_1.Typography, { component: "div", style: { fontWeight: 600, fontSize: '16px', color: '#1C1F2B' } },
294
+ service.title,
295
+ (serviceExistsInArray === null || serviceExistsInArray === void 0 ? void 0 : serviceExistsInArray.currentService) && (react_1.default.createElement(core_1.Typography, { variant: "caption", style: { fontWeight: 400, fontSize: '16px', fontStyle: 'italic' } }, "\u00A0(current service line)")))),
296
+ react_1.default.createElement(core_1.Box, { display: 'flex', alignItems: 'center', ml: 4 },
297
+ react_1.default.createElement(core_1.TextField, { size: "small", variant: "outlined", value: (serviceExistsInArray === null || serviceExistsInArray === void 0 ? void 0 : serviceExistsInArray.rate) || '', onChange: (e) => handlePriceChange(service.title, e.target.value ? parseInt(e.target.value) : 0, serviceExistsInArray === null || serviceExistsInArray === void 0 ? void 0 : serviceExistsInArray.currentService), InputProps: {
298
+ startAdornment: react_1.default.createElement(core_1.Typography, null, "$\u00A0"),
299
+ endAdornment: react_1.default.createElement(core_1.Typography, null, "\u00A0/hr"),
300
+ }, style: { width: 100 }, required: serviceExistsInArray, error: serviceExistsInArray && !serviceExistsInArray.rate, label: "Rate", className: "serviceLineRateInput" }),
301
+ react_1.default.createElement(core_1.IconButton, { onClick: () => handleExpandToggle(service.title) }, isExpanded ? react_1.default.createElement(icons_1.ExpandLess, null) : react_1.default.createElement(icons_1.ExpandMore, null)))))),
302
+ isExpanded && react_1.default.createElement(core_1.Box, { ml: 2 },
303
+ react_1.default.createElement(core_1.Typography, { variant: "caption", style: { fontWeight: 400, fontSize: '16px' } }, service.description))));
304
+ }))))
305
+ :
306
+ react_1.default.createElement(core_1.Grid, { container: true, className: "service-lines-header", direction: "column", justifyContent: "center" },
307
+ react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justifyContent: "space-between", alignItems: "flex-start" },
308
+ react_1.default.createElement(core_1.Grid, { item: true, direction: "column", justifyContent: "flex-start" },
309
+ react_1.default.createElement(core_1.Typography, { variant: "h6", style: { color: '#12756F', fontSize: '24px', fontWeight: 600 } }, "Give your Expertise a Title"),
310
+ react_1.default.createElement(core_1.Typography, { variant: "body2", style: { color: '#1C1F2B', fontSize: '16px', fontWeight: 600 } }, "Step 2: Showcase your profile with a title")),
311
+ react_1.default.createElement(core_1.Grid, { item: true, style: { backgroundColor: '#0E3435', color: '#ffffff', borderRadius: '20px', padding: '6px 20px' } },
312
+ "Step ",
313
+ value + 1,
314
+ " of 2")),
315
+ react_1.default.createElement(core_1.Grid, { container: true, item: true, direction: "column", justifyContent: "center", alignItems: "center" },
316
+ react_1.default.createElement(core_1.Typography, { variant: "subtitle1", style: { textDecoration: 'underline', fontStyle: 'italic', fontSize: '16px', fontWeight: 400, marginTop: '16px', marginBottom: '16px' } }, "Why Add a Job Title to Your Profile?")),
317
+ react_1.default.createElement(core_1.Grid, { container: true, item: true, direction: "row", justifyContent: "space-between", alignItems: "center", xs: 10, spacing: 1, style: { margin: 'auto' } },
318
+ react_1.default.createElement(core_1.Box, { display: "flex", flexDirection: "row", alignItems: "center", width: '50%' },
319
+ react_1.default.createElement(icons_1.AdjustRounded, { style: {
320
+ marginRight: 8,
321
+ color: '#248384',
322
+ fontSize: '20px'
323
+ }, className: "headerCircle" }),
324
+ react_1.default.createElement(core_1.Typography, { className: "headerFeature", variant: "body2", style: { fontSize: '16px', fontWeight: 400 } },
325
+ react_1.default.createElement("b", { style: { display: 'inline', whiteSpace: 'nowrap' } }, "Showcase Your Brand:"),
326
+ " Your job title is the first impression Clients get of your professional identity")),
327
+ react_1.default.createElement(core_1.Box, { display: "flex", flexDirection: "row", alignItems: "center", width: '50%' },
328
+ react_1.default.createElement(icons_1.AdjustRounded, { style: {
329
+ marginRight: 8,
330
+ color: '#248384',
331
+ fontSize: '20px'
332
+ }, className: "headerCircle" }),
333
+ react_1.default.createElement(core_1.Typography, { className: "headerFeature", variant: "body2", style: { fontSize: '16px', fontWeight: 400 } },
334
+ react_1.default.createElement("b", { style: { display: 'inline', whiteSpace: 'nowrap' } }, "Control Your Narrative:"),
335
+ " Your job title gives you the opportunity to shape how Clients perceive you, positioning yourself as a trusted expert in your field."))),
336
+ react_1.default.createElement(core_1.Grid, { xs: 12, style: { marginTop: 16 }, container: true, direction: "column", justifyContent: "center", alignItems: "center" },
337
+ react_1.default.createElement(core_1.Box, null,
338
+ react_1.default.createElement(core_1.Typography, { variant: "h5", style: { fontWeight: 500 } }, "Select from the following Expertise titles:")),
339
+ react_1.default.createElement(core_1.Grid, { item: true, style: { marginBottom: 12, width: '50%' } },
340
+ react_1.default.createElement(core_1.Select, { required: true, autoWidth: false, variant: "outlined", fullWidth: true, defaultValue: titleOptions, onChange: (event) => handleChangeTitle(event), value: selectedTitle !== null && selectedTitle !== void 0 ? selectedTitle : (_a = titleOptions[0]) === null || _a === void 0 ? void 0 : _a.title },
341
+ titleOptions.length > 1 && (react_1.default.createElement(core_1.MenuItem, { disabled: true, value: "" },
342
+ react_1.default.createElement("em", null, "Select title"))),
343
+ titleOptions.map((option) => (react_1.default.createElement(core_1.MenuItem, { key: option.id, value: option.title }, option.title))),
344
+ react_1.default.createElement(core_1.MenuItem, { value: "Other" },
345
+ react_1.default.createElement("em", null, "Other")))),
346
+ selectedTitle === 'Other' && react_1.default.createElement(core_1.Grid, { item: true, style: { width: '70%' } },
347
+ react_1.default.createElement(core_1.TextField, { size: "small", variant: "outlined", value: customTitle, fullWidth: true, onChange: (e) => { setCustomTitle(e.target.value); }, placeholder: "Enter custom title" })))),
348
+ (value === 1 || isInternalProfile) ?
349
+ react_1.default.createElement(react_1.default.Fragment, null, ActionButtons(disablePublicProfile))
350
+ :
351
+ react_1.default.createElement(core_1.Grid, { item: true, direction: "row", justifyContent: "flex-end", style: { marginLeft: 'auto' } },
352
+ react_1.default.createElement(base_ui_1.Button, { label: "NEXT", onClick: () => handleUpdateProfile(), type: "button", isLoading: updateClicked, disabled: isUpdateButtonDisabled(), color: "primary" }))));
318
353
  };
319
- return (openServiceLinesTemplate && (react_1.default.createElement(core_1.Grid, { style: { backgroundColor: '#fff' } }, loading ? (react_1.default.createElement(core_1.Box, { display: "flex", justifyContent: "center", alignItems: "center", minHeight: "200px" },
320
- react_1.default.createElement(core_1.CircularProgress, null))) : (react_1.default.createElement(react_1.default.Fragment, null,
321
- isInternalProfile ?
322
- react_1.default.createElement(react_1.default.Fragment, null, ServiceLinesTab())
323
- :
324
- react_1.default.createElement(lab_1.TabContext, { value: value + '' },
325
- react_1.default.createElement(core_1.AppBar, { position: 'static', color: 'inherit', style: { backgroundColor: 'transparent', boxShadow: 'none' } },
326
- react_1.default.createElement(core_1.Tabs, { TabIndicatorProps: { style: { background: '#248384' } }, value: value, onChange: handleChange, variant: "scrollable", scrollButtons: "on" },
327
- react_1.default.createElement(core_1.Tab, { label: react_1.default.createElement("div", { className: "flex flex-row self-center" }, "Add Additional Service Lines") }),
328
- react_1.default.createElement(core_1.Tab, { label: react_1.default.createElement("div", { className: "flex flex-row self-center" }, "Add a Title to Your Profile") }))),
329
- react_1.default.createElement(lab_1.TabPanel, { value: '0' }, ServiceLinesTab()),
330
- react_1.default.createElement(lab_1.TabPanel, { value: '1' }, VanityTitlesTab())),
331
- react_1.default.createElement(react_hot_toast_1.Toaster, { position: "top-center", toastOptions: {
332
- style: {
333
- zIndex: 9999,
334
- backgroundColor: 'transparent'
335
- },
336
- } }))))));
354
+ if (loading) {
355
+ return (react_1.default.createElement(core_1.Box, { display: "flex", justifyContent: "center", alignItems: "center", width: '100%', style: { margin: 'auto' } },
356
+ react_1.default.createElement(core_1.CircularProgress, null)));
357
+ }
358
+ return (openServiceLinesTemplate && (react_1.default.createElement(core_1.Grid, { style: { backgroundColor: '#fff', minWidth: '100%' } },
359
+ react_1.default.createElement(react_1.default.Fragment, null,
360
+ newServiceLine(),
361
+ react_1.default.createElement(react_hot_toast_1.Toaster, { position: "top-center", toastOptions: {
362
+ style: {
363
+ zIndex: 9999,
364
+ backgroundColor: 'transparent'
365
+ },
366
+ } })))));
337
367
  };
338
368
  exports.ServiceLinesTemplate = ServiceLinesTemplate;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paro.io/expert-shared-components",
3
- "version": "1.8.0",
3
+ "version": "1.8.2",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {