@myinterview/chatbot 0.1.83-beta-6de9e8f → 0.1.83-experimental-5ef0113
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/dist/{index-CmXjRrcO.js → index-82K4VMPr.js} +2 -2
- package/dist/{index-CmXjRrcO.js.map → index-82K4VMPr.js.map} +1 -1
- package/dist/{index-ChvSwazI.js → index-B1PhDqQU.js} +2 -2
- package/dist/{index-ChvSwazI.js.map → index-B1PhDqQU.js.map} +1 -1
- package/dist/{index-Cq10P-Ek.js → index-Bfpo0a5Z.js} +2 -2
- package/dist/{index-Cq10P-Ek.js.map → index-Bfpo0a5Z.js.map} +1 -1
- package/dist/{index-D_TxBUSy.js → index-BuelnB5n.js} +2 -2
- package/dist/{index-D_TxBUSy.js.map → index-BuelnB5n.js.map} +1 -1
- package/dist/{index-DQgXuo_L.js → index-CkbL7iJf.js} +2 -2
- package/dist/{index-DQgXuo_L.js.map → index-CkbL7iJf.js.map} +1 -1
- package/dist/{index-DNz8bgwT.js → index-DAGKBbVh.js} +2 -2
- package/dist/{index-DNz8bgwT.js.map → index-DAGKBbVh.js.map} +1 -1
- package/dist/{index-CvMs6HOZ.js → index-DWNxQdON.js} +2 -2
- package/dist/{index-CvMs6HOZ.js.map → index-DWNxQdON.js.map} +1 -1
- package/dist/{index-Cuw7GmwU.js → index-D_7jEcrY.js} +2 -2
- package/dist/{index-Cuw7GmwU.js.map → index-D_7jEcrY.js.map} +1 -1
- package/dist/{index-BdxEyHMw.js → index-DxAr8LqJ.js} +2 -2
- package/dist/{index-BdxEyHMw.js.map → index-DxAr8LqJ.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/{main.react-Cw8cM5DU.js → main.react-DoE2iju5.js} +4 -4
- package/dist/{main.react-Cw8cM5DU.js.map → main.react-DoE2iju5.js.map} +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs as c, jsx as i } from "react/jsx-runtime";
|
|
2
|
-
import { c as n, _ as b, t as v, P as g } from "./main.react-
|
|
2
|
+
import { c as n, _ as b, t as v, P as g } from "./main.react-DoE2iju5.js";
|
|
3
3
|
import { useState as a } from "react";
|
|
4
4
|
const f = ({ data: s, completed: r, onSubmitAnswer: m }) => {
|
|
5
5
|
const [l, d] = a(r), [t, o] = a(), h = (e) => {
|
|
@@ -16,4 +16,4 @@ const f = ({ data: s, completed: r, onSubmitAnswer: m }) => {
|
|
|
16
16
|
export {
|
|
17
17
|
f as default
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=index-
|
|
19
|
+
//# sourceMappingURL=index-B1PhDqQU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-B1PhDqQU.js","sources":["../src/components/modules/SingleSelect/index.tsx"],"sourcesContent":["import { Button, Check, Text } from '@myinterview/component-library';\nimport { useState } from 'react';\nimport classNames from 'classnames';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\n\nconst SingleSelect = ({ data, completed, onSubmitAnswer }: MessageModuleProps<ModuleType.SINGLE_SELECT>) => {\n const [isDisabled, setIsDisabled] = useState<boolean>(completed);\n const [selectedOption, setSelectedOption] = useState<typeof data['options'][number] | null>();\n\n const handleChange = (option: typeof data['options'][number]) => {\n if (isDisabled) return;\n setSelectedOption(option);\n };\n\n const handleSubmit = () => {\n if (!selectedOption) return;\n onSubmitAnswer(\n {\n ...data,\n options: data.options.map((option) => ({ ...option, selected: option.id === selectedOption.id })),\n selected_id: selectedOption.id,\n },\n selectedOption.title,\n );\n setIsDisabled(true);\n };\n\n return (\n <div className=\"myinterview-chatbot-single-select\">\n <div className={classNames('myinterview-chatbot-single-select__list', { 'myinterview-chatbot-single-select__list--disabled': isDisabled })}>\n {data.options.map((option) => (\n <div\n key={option.id}\n className=\"myinterview-chatbot-single-select__item\"\n onClick={() => handleChange(option)}\n role=\"presentation\"\n >\n <div className={classNames('myinterview-chatbot-single-select__checkmark', { 'myinterview-chatbot-single-select__checkmark--selected': option.id === selectedOption?.id })}>\n <Check />\n </div>\n <Text className=\"myinterview-chatbot-single-select__title\">{option.title}</Text>\n </div>\n ))}\n </div>\n\n <Button\n size=\"small\"\n onClick={handleSubmit}\n disabled={isDisabled || !selectedOption}\n >\n {data.buttonText || 'Submit'}\n </Button>\n </div>\n );\n};\n\nexport default SingleSelect;\n"],"names":["SingleSelect","data","completed","onSubmitAnswer","isDisabled","setIsDisabled","useState","selectedOption","setSelectedOption","handleChange","option","handleSubmit","_jsxs","_jsx","classNames","Check","Text","Button"],"mappings":";;;AAMA,MAAMA,IAAe,CAAC,EAAE,MAAAC,GAAM,WAAAC,GAAW,gBAAAC,QAAkE;AACzG,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAkBJ,CAAS,GACzD,CAACK,GAAgBC,CAAiB,IAAIF,EAAA,GAEtCG,IAAe,CAACC,MAA0C;AAC9D,IAAIN,KACJI,EAAkBE,CAAM;AAAA,EAC1B,GAEMC,IAAe,MAAK;AACxB,IAAKJ,MACLJ,EACE;AAAA,MACE,GAAGF;AAAA,MACH,SAASA,EAAK,QAAQ,IAAI,CAACS,OAAY,EAAE,GAAGA,GAAQ,UAAUA,EAAO,OAAOH,EAAe,KAAK;AAAA,MAChG,aAAaA,EAAe;AAAA,IAAA,GAE9BA,EAAe,KAAK,GAEtBF,EAAc,EAAI;AAAA,EACpB;AAEA,SACEO,EAAA,OAAA,EAAK,WAAU,qCAAmC,UAAA,CAChDC,EAAA,OAAA,EAAK,WAAWC,EAAW,2CAA2C,EAAE,qDAAqDV,EAAA,CAAY,GAAC,UACvIH,EAAK,QAAQ,IAAI,CAACS,MACjBE,EAAA,OAAA,EAEE,WAAU,2CACV,SAAS,MAAMH,EAAaC,CAAM,GAClC,MAAK,gBAAc,UAAA,CAEnBG,EAAA,OAAA,EAAK,WAAWC,EAAW,gDAAgD,EAAE,0DAA0DJ,EAAO,QAAOH,KAAA,gBAAAA,EAAgB,IAAA,CAAI,GAAC,UACxKM,EAACE,GAAK,EAAA,GAAG,GAEXF,EAACG,GAAI,EAAC,WAAU,4CAA0C,UAAEN,EAAO,MAAA,CAAK,CAAQ,EAAA,GAR3EA,EAAO,EAAE,CAUjB,EAAA,CAAC,GAGJG,EAACI,GAAM,EACL,MAAK,SACL,SAASN,GACT,UAAUP,KAAc,CAACG,GAAc,UAEtCN,EAAK,cAAc,UAAQ,CACrB,GAAA;AAGf;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
-
import { P as r } from "./main.react-
|
|
2
|
+
import { P as r } from "./main.react-DoE2iju5.js";
|
|
3
3
|
import { useState as h } from "react";
|
|
4
4
|
const p = ({ data: i, completed: c, onSubmitAnswer: a }) => {
|
|
5
5
|
const [d, m] = h(c), n = (e) => {
|
|
@@ -15,4 +15,4 @@ const p = ({ data: i, completed: c, onSubmitAnswer: a }) => {
|
|
|
15
15
|
export {
|
|
16
16
|
p as default
|
|
17
17
|
};
|
|
18
|
-
//# sourceMappingURL=index-
|
|
18
|
+
//# sourceMappingURL=index-Bfpo0a5Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-Bfpo0a5Z.js","sources":["../src/components/modules/YesNo/index.tsx"],"sourcesContent":["import { Button } from '@myinterview/component-library';\nimport { useState } from 'react';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\n\nconst SingleSelect = ({ data, completed, onSubmitAnswer }: MessageModuleProps<ModuleType.YES_NO>) => { // TODO: Disable buttons after seleted / completed: true\n const [isDisabled, setIsDisabled] = useState<boolean>(completed);\n\n const handleClick = (selectedOption: typeof data.options[number]) => {\n const { id, title } = selectedOption;\n onSubmitAnswer({\n ...data,\n options: data.options.map((option) => ({ ...option, selected: option.id === id })),\n selected_id: id,\n }, title);\n setIsDisabled(true);\n };\n\n return (\n <div className=\"myinterview-chatbot-yes-no\">\n <div className=\"myinterview-chatbot-yes-no__list\">\n {data.options.map((option) => (\n <Button\n key={option.id}\n size=\"small\"\n className=\"myinterview-chatbot-yes-no__item\"\n onClick={() => handleClick(option)}\n value={option.id}\n disabled={isDisabled}\n >\n {option.title}\n </Button>\n ))}\n </div>\n </div>\n );\n};\n\nexport default SingleSelect;\n"],"names":["SingleSelect","data","completed","onSubmitAnswer","isDisabled","setIsDisabled","useState","handleClick","selectedOption","id","title","option","_jsx","Button"],"mappings":";;;AAKA,MAAMA,IAAe,CAAC,EAAE,MAAAC,GAAM,WAAAC,GAAW,gBAAAC,QAA2D;AAClG,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAkBJ,CAAS,GAEzDK,IAAc,CAACC,MAA+C;AAClE,UAAM,EAAE,IAAAC,GAAI,OAAAC,EAAA,IAAUF;AACtB,IAAAL,EAAe;AAAA,MACb,GAAGF;AAAA,MACH,SAASA,EAAK,QAAQ,IAAI,CAACU,OAAY,EAAE,GAAGA,GAAQ,UAAUA,EAAO,OAAOF,IAAK;AAAA,MACjF,aAAaA;AAAA,IAAA,GACZC,CAAK,GACRL,EAAc,EAAI;AAAA,EACpB;AAEA,SACEO,EAAA,OAAA,EAAK,WAAU,8BAA4B,UACzCA,EAAA,OAAA,EAAK,WAAU,oCAAkC,UAC9CX,EAAK,QAAQ,IAAI,CAACU,MACjBC,EAACC,GAAM,EAEL,MAAK,SACL,WAAU,oCACV,SAAS,MAAMN,EAAYI,CAAM,GACjC,OAAOA,EAAO,IACd,UAAUP,GAAU,UAEnBO,EAAO,MAAA,GAPHA,EAAO,EAAE,CASjB,EAAA,CAAC,GACE;AAGZ;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as s, jsxs as N, Fragment as H } from "react/jsx-runtime";
|
|
2
2
|
import { useState as c, useRef as I, useEffect as T, useCallback as J } from "react";
|
|
3
|
-
import { D as v, a as z, u as X, c as g, B as E, t as M, S as K, P as Q, b as U } from "./main.react-
|
|
3
|
+
import { D as v, a as z, u as X, c as g, B as E, t as M, S as K, P as Q, b as U } from "./main.react-DoE2iju5.js";
|
|
4
4
|
const Y = (i) => {
|
|
5
5
|
const a = /* @__PURE__ */ new Map();
|
|
6
6
|
return i.available_slots.forEach(({ start: r }) => {
|
|
@@ -84,4 +84,4 @@ const Y = (i) => {
|
|
|
84
84
|
export {
|
|
85
85
|
ce as default
|
|
86
86
|
};
|
|
87
|
-
//# sourceMappingURL=index-
|
|
87
|
+
//# sourceMappingURL=index-BuelnB5n.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-D_TxBUSy.js","sources":["../src/utils/scheduling.utils.ts","../src/services/scheduling.service.ts","../src/components/modules/Scheduling/index.tsx"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { CronofyCalendarAvailabilityResponse } from '../interfaces/modules/schedule';\n\nexport const transformCalendarRequest = (data: CronofyCalendarAvailabilityResponse['data']['data']) => {\n const results: Map<string, string[]> = new Map();\n\n data.available_slots.forEach(({ start }) => {\n const day = DateTime.fromISO(start).startOf('day').toISO() as string;\n results.set(day, (results.get(day) ?? []).concat(start));\n });\n\n return results;\n};\n","import { ReduxConversationAttributes, ReduxMessageAttributes } from '../interfaces/mainInterface';\nimport { CreateMeetingResponse, CronofyCalendarAvailabilityResponse } from '../interfaces/modules/schedule';\nimport { transformCalendarRequest } from '../utils/scheduling.utils';\nimport { axiosInstanceVius } from './axiosInstances.service';\n\nexport const getCalendarAvailability = async (authorization: string) => {\n const response: CronofyCalendarAvailabilityResponse = await axiosInstanceVius.get('/modules/cronofy/availability', { headers: { authorization } });\n return transformCalendarRequest(response.data.data);\n};\n\nexport const scheduleInterview = async (date: string, authorization: string, conversation_attributes: ReduxConversationAttributes, module_id:ReduxMessageAttributes['module_id']):Promise<CreateMeetingResponse> => axiosInstanceVius.post(\n '/modules/cronofy/meeting',\n { start: date, conversation_attributes },\n {\n headers: { authorization },\n params: { type: 'chatbot', module_id },\n },\n);\n","/* eslint-disable react/no-array-index-key */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { DateTime } from 'luxon';\nimport classNames from 'classnames';\nimport { Button, /* Loader */ Text } from '@myinterview/component-library';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\nimport { getCalendarAvailability, scheduleInterview } from '../../../services/scheduling.service';\nimport { useAppSelector } from '../../../store/hooks';\nimport { conversationsMap } from '../../../utils/sdkObject.utils';\nimport { ReduxConversationAttributes } from '../../../interfaces/mainInterface';\nimport Skeleton from '../../ui/Skeleton';\nimport BackButton from '../../common/BackButton';\n\nconst ARROW_MOVE_DISTANCE = 75;\n\nconst Scheduling = ({ id, completed }: MessageModuleProps<ModuleType.SCHEDULE_MEETING>) => {\n const auth = useAppSelector((state) => state.chatbotConfig.auth);\n const selectedConversationId = useAppSelector((state) => state.main.selectedConversationId);\n const [timePoints, setTimePoints] = useState<Map<string, string[]>>();\n const [isFetching, setIsFetching] = useState<boolean>(true);\n const [isSubmiting, setIsSubmiting] = useState<boolean>(false);\n const [isScheduled, setIsScheduled] = useState<boolean>(completed);\n const [selectedDay, setSelectedDay] = useState<string>('');\n const [selectedTimePoint, setSelectedTimePoint] = useState<string>('');\n const [offsetX, setOffsetX] = useState<number>(0);\n const [translateX, setTranslateX] = useState<number>(0);\n const lastTouchX = useRef<number | null>(null);\n const daysRef = useRef<HTMLDivElement>();\n const resizeObserver = useRef<ResizeObserver | null>(null);\n\n useEffect(() => {\n getCalendarAvailability(auth).then((res) => {\n setTimePoints(res);\n setIsFetching(false);\n });\n }, []);\n\n const onDaySelected = (day: string) => {\n setSelectedDay(day);\n };\n\n const onSelectTimePoint = (timepoint: string) => {\n setSelectedTimePoint(timepoint);\n };\n\n // const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n // if (!e.buttons) return;\n // const { movementX } = e;\n // setTranslateX((prev) => Math.min(Math.max(prev + movementX, offsetX), 0));\n // };\n\n const resetTransitionDuration = () => {\n daysRef.current!.style.transitionDuration = '0ms';\n };\n\n const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n const touchX = e.touches[0].pageX;\n if (lastTouchX.current === null) {\n lastTouchX.current = touchX;\n return;\n }\n const movementX = (touchX - lastTouchX.current);\n setTranslateX((prev) => Math.min(Math.max(prev + movementX, offsetX), 0));\n lastTouchX.current = touchX;\n };\n\n const handleTouchEnd = () => {\n lastTouchX.current = null;\n };\n\n const onNavigate = (value: 1 | -1) => {\n daysRef.current!.style.transitionDuration = '300ms';\n const movementX = value * ARROW_MOVE_DISTANCE;\n setTranslateX((prev) => Math.min(Math.max(prev + movementX, offsetX), 0));\n };\n\n useEffect(() => {\n setSelectedTimePoint('');\n }, [selectedDay]);\n\n const onSubmitDate = async () => {\n try {\n setIsSubmiting(true);\n const conversationAttributes = (conversationsMap.get(selectedConversationId)?.attributes as ReduxConversationAttributes);\n await scheduleInterview(selectedTimePoint, auth, conversationAttributes, id);\n setIsScheduled(true);\n } finally {\n setIsSubmiting(false);\n }\n };\n\n const handleDayRef = useCallback((node: HTMLDivElement) => {\n daysRef.current = node;\n if (!daysRef.current) {\n resizeObserver.current?.disconnect();\n return;\n }\n resizeObserver.current = new ResizeObserver(([entry]) => {\n const { clientWidth, scrollWidth } = entry.target;\n setOffsetX(clientWidth - scrollWidth);\n setTranslateX(0);\n });\n\n resizeObserver.current.observe(daysRef.current);\n }, []);\n\n useEffect(() => {\n if (!daysRef.current) return;\n const { clientWidth, scrollWidth } = daysRef.current;\n setOffsetX(clientWidth - scrollWidth);\n setTranslateX(0);\n }, [timePoints]);\n\n return (\n <div className=\"myinterview-chatbot-scheduling myinterview-chatbot-no-select\">\n {(isFetching || timePoints?.size) && (\n <div className={classNames('myinterview-chatbot-scheduling__wrapper', { 'myinterview-chatbot-scheduling__wrapper--disabled': isScheduled || isSubmiting || completed })}>\n <div className={classNames('myinterview-chatbot-scheduling__days', { 'myinterview-chatbot-scheduling__days--prev-scroll': translateX, 'myinterview-chatbot-scheduling__days--next-scroll': offsetX < translateX })}>\n {timePoints && !!translateX && <BackButton classNames=\"myinterview-chatbot-scheduling__navigation-button\" onClick={() => onNavigate(1)} />}\n <div\n ref={handleDayRef}\n className=\"myinterview-chatbot-scheduling__days-scrollable\"\n style={{ transform: `translate3d(${translateX}px, 0px, 0px)` }}\n // onMouseMove={handleMouseMove}\n onTouchStart={resetTransitionDuration}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n role=\"presentation\"\n >\n {(timePoints ? Array.from(timePoints.keys()) : [...Array(5)]).map((day, idx) => (\n <div\n key={day ?? idx}\n className={classNames(\n 'myinterview-chatbot-scheduling__day',\n { 'myinterview-chatbot-scheduling--selected-item': day === selectedDay },\n { 'myinterview-chatbot-scheduling--disabled': isFetching },\n )}\n onClick={() => onDaySelected(day)}\n role=\"presentation\"\n >\n {timePoints ? (\n <>\n <Text className=\"myinterview-chatbot-scheduling__day-value\" size=\"P1-M\">{DateTime.fromISO(day).toFormat('ccc')}</Text>\n <Text className=\"myinterview-chatbot-scheduling__day-value\" size=\"P1-M\">{DateTime.fromISO(day).toFormat('LLL dd')}</Text>\n </>\n )\n : <Skeleton />}\n </div>\n ))}\n </div>\n {timePoints && offsetX < translateX && <BackButton classNames=\"myinterview-chatbot-scheduling__navigation-button myinterview-chatbot-scheduling__navigation-button--next\" onClick={() => onNavigate(-1)} />}\n\n </div>\n\n {timePoints?.get(selectedDay) && (\n <div className=\"myinterview-chatbot-scheduling__times\">\n {timePoints.get(selectedDay)!.map((timePoint) => (\n <div\n key={timePoint}\n className={classNames('myinterview-chatbot-scheduling__time', { 'myinterview-chatbot-scheduling--selected-item': timePoint === selectedTimePoint })}\n onClick={() => onSelectTimePoint(timePoint)}\n role=\"presentation\"\n >\n <Text className=\"myinterview-chatbot-scheduling__time-value\" size=\"P1-M\">{DateTime.fromISO(timePoint).toLocaleString(DateTime.TIME_SIMPLE)}</Text>\n </div>\n ))}\n </div>\n )}\n\n {!!selectedDay && (\n <Button\n className=\"myinterview-chatbot-scheduling__submit-buttton\"\n size=\"small\"\n disabled={!selectedTimePoint || isScheduled || isSubmiting}\n onClick={onSubmitDate}\n >\n {isScheduled ? 'Scheduled' : isSubmiting ? 'Scheduling...' : 'Schedule'}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default Scheduling;\n"],"names":["transformCalendarRequest","data","results","start","day","DateTime","getCalendarAvailability","authorization","response","axiosInstanceVius","scheduleInterview","date","conversation_attributes","module_id","ARROW_MOVE_DISTANCE","Scheduling","id","completed","auth","useAppSelector","state","selectedConversationId","timePoints","setTimePoints","useState","isFetching","setIsFetching","isSubmiting","setIsSubmiting","isScheduled","setIsScheduled","selectedDay","setSelectedDay","selectedTimePoint","setSelectedTimePoint","offsetX","setOffsetX","translateX","setTranslateX","lastTouchX","useRef","daysRef","resizeObserver","useEffect","res","onDaySelected","onSelectTimePoint","timepoint","resetTransitionDuration","handleTouchMove","touchX","movementX","prev","handleTouchEnd","onNavigate","value","onSubmitDate","conversationAttributes","_a","conversationsMap","handleDayRef","useCallback","node","entry","clientWidth","scrollWidth","_jsx","_jsxs","classNames","BackButton","idx","_Fragment","Text","Skeleton","timePoint","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-BuelnB5n.js","sources":["../src/utils/scheduling.utils.ts","../src/services/scheduling.service.ts","../src/components/modules/Scheduling/index.tsx"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { CronofyCalendarAvailabilityResponse } from '../interfaces/modules/schedule';\n\nexport const transformCalendarRequest = (data: CronofyCalendarAvailabilityResponse['data']['data']) => {\n const results: Map<string, string[]> = new Map();\n\n data.available_slots.forEach(({ start }) => {\n const day = DateTime.fromISO(start).startOf('day').toISO() as string;\n results.set(day, (results.get(day) ?? []).concat(start));\n });\n\n return results;\n};\n","import { ReduxConversationAttributes, ReduxMessageAttributes } from '../interfaces/mainInterface';\nimport { CreateMeetingResponse, CronofyCalendarAvailabilityResponse } from '../interfaces/modules/schedule';\nimport { transformCalendarRequest } from '../utils/scheduling.utils';\nimport { axiosInstanceVius } from './axiosInstances.service';\n\nexport const getCalendarAvailability = async (authorization: string) => {\n const response: CronofyCalendarAvailabilityResponse = await axiosInstanceVius.get('/modules/cronofy/availability', { headers: { authorization } });\n return transformCalendarRequest(response.data.data);\n};\n\nexport const scheduleInterview = async (date: string, authorization: string, conversation_attributes: ReduxConversationAttributes, module_id:ReduxMessageAttributes['module_id']):Promise<CreateMeetingResponse> => axiosInstanceVius.post(\n '/modules/cronofy/meeting',\n { start: date, conversation_attributes },\n {\n headers: { authorization },\n params: { type: 'chatbot', module_id },\n },\n);\n","/* eslint-disable react/no-array-index-key */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { DateTime } from 'luxon';\nimport classNames from 'classnames';\nimport { Button, /* Loader */ Text } from '@myinterview/component-library';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\nimport { getCalendarAvailability, scheduleInterview } from '../../../services/scheduling.service';\nimport { useAppSelector } from '../../../store/hooks';\nimport { conversationsMap } from '../../../utils/sdkObject.utils';\nimport { ReduxConversationAttributes } from '../../../interfaces/mainInterface';\nimport Skeleton from '../../ui/Skeleton';\nimport BackButton from '../../common/BackButton';\n\nconst ARROW_MOVE_DISTANCE = 75;\n\nconst Scheduling = ({ id, completed }: MessageModuleProps<ModuleType.SCHEDULE_MEETING>) => {\n const auth = useAppSelector((state) => state.chatbotConfig.auth);\n const selectedConversationId = useAppSelector((state) => state.main.selectedConversationId);\n const [timePoints, setTimePoints] = useState<Map<string, string[]>>();\n const [isFetching, setIsFetching] = useState<boolean>(true);\n const [isSubmiting, setIsSubmiting] = useState<boolean>(false);\n const [isScheduled, setIsScheduled] = useState<boolean>(completed);\n const [selectedDay, setSelectedDay] = useState<string>('');\n const [selectedTimePoint, setSelectedTimePoint] = useState<string>('');\n const [offsetX, setOffsetX] = useState<number>(0);\n const [translateX, setTranslateX] = useState<number>(0);\n const lastTouchX = useRef<number | null>(null);\n const daysRef = useRef<HTMLDivElement>();\n const resizeObserver = useRef<ResizeObserver | null>(null);\n\n useEffect(() => {\n getCalendarAvailability(auth).then((res) => {\n setTimePoints(res);\n setIsFetching(false);\n });\n }, []);\n\n const onDaySelected = (day: string) => {\n setSelectedDay(day);\n };\n\n const onSelectTimePoint = (timepoint: string) => {\n setSelectedTimePoint(timepoint);\n };\n\n // const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n // if (!e.buttons) return;\n // const { movementX } = e;\n // setTranslateX((prev) => Math.min(Math.max(prev + movementX, offsetX), 0));\n // };\n\n const resetTransitionDuration = () => {\n daysRef.current!.style.transitionDuration = '0ms';\n };\n\n const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n const touchX = e.touches[0].pageX;\n if (lastTouchX.current === null) {\n lastTouchX.current = touchX;\n return;\n }\n const movementX = (touchX - lastTouchX.current);\n setTranslateX((prev) => Math.min(Math.max(prev + movementX, offsetX), 0));\n lastTouchX.current = touchX;\n };\n\n const handleTouchEnd = () => {\n lastTouchX.current = null;\n };\n\n const onNavigate = (value: 1 | -1) => {\n daysRef.current!.style.transitionDuration = '300ms';\n const movementX = value * ARROW_MOVE_DISTANCE;\n setTranslateX((prev) => Math.min(Math.max(prev + movementX, offsetX), 0));\n };\n\n useEffect(() => {\n setSelectedTimePoint('');\n }, [selectedDay]);\n\n const onSubmitDate = async () => {\n try {\n setIsSubmiting(true);\n const conversationAttributes = (conversationsMap.get(selectedConversationId)?.attributes as ReduxConversationAttributes);\n await scheduleInterview(selectedTimePoint, auth, conversationAttributes, id);\n setIsScheduled(true);\n } finally {\n setIsSubmiting(false);\n }\n };\n\n const handleDayRef = useCallback((node: HTMLDivElement) => {\n daysRef.current = node;\n if (!daysRef.current) {\n resizeObserver.current?.disconnect();\n return;\n }\n resizeObserver.current = new ResizeObserver(([entry]) => {\n const { clientWidth, scrollWidth } = entry.target;\n setOffsetX(clientWidth - scrollWidth);\n setTranslateX(0);\n });\n\n resizeObserver.current.observe(daysRef.current);\n }, []);\n\n useEffect(() => {\n if (!daysRef.current) return;\n const { clientWidth, scrollWidth } = daysRef.current;\n setOffsetX(clientWidth - scrollWidth);\n setTranslateX(0);\n }, [timePoints]);\n\n return (\n <div className=\"myinterview-chatbot-scheduling myinterview-chatbot-no-select\">\n {(isFetching || timePoints?.size) && (\n <div className={classNames('myinterview-chatbot-scheduling__wrapper', { 'myinterview-chatbot-scheduling__wrapper--disabled': isScheduled || isSubmiting || completed })}>\n <div className={classNames('myinterview-chatbot-scheduling__days', { 'myinterview-chatbot-scheduling__days--prev-scroll': translateX, 'myinterview-chatbot-scheduling__days--next-scroll': offsetX < translateX })}>\n {timePoints && !!translateX && <BackButton classNames=\"myinterview-chatbot-scheduling__navigation-button\" onClick={() => onNavigate(1)} />}\n <div\n ref={handleDayRef}\n className=\"myinterview-chatbot-scheduling__days-scrollable\"\n style={{ transform: `translate3d(${translateX}px, 0px, 0px)` }}\n // onMouseMove={handleMouseMove}\n onTouchStart={resetTransitionDuration}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n role=\"presentation\"\n >\n {(timePoints ? Array.from(timePoints.keys()) : [...Array(5)]).map((day, idx) => (\n <div\n key={day ?? idx}\n className={classNames(\n 'myinterview-chatbot-scheduling__day',\n { 'myinterview-chatbot-scheduling--selected-item': day === selectedDay },\n { 'myinterview-chatbot-scheduling--disabled': isFetching },\n )}\n onClick={() => onDaySelected(day)}\n role=\"presentation\"\n >\n {timePoints ? (\n <>\n <Text className=\"myinterview-chatbot-scheduling__day-value\" size=\"P1-M\">{DateTime.fromISO(day).toFormat('ccc')}</Text>\n <Text className=\"myinterview-chatbot-scheduling__day-value\" size=\"P1-M\">{DateTime.fromISO(day).toFormat('LLL dd')}</Text>\n </>\n )\n : <Skeleton />}\n </div>\n ))}\n </div>\n {timePoints && offsetX < translateX && <BackButton classNames=\"myinterview-chatbot-scheduling__navigation-button myinterview-chatbot-scheduling__navigation-button--next\" onClick={() => onNavigate(-1)} />}\n\n </div>\n\n {timePoints?.get(selectedDay) && (\n <div className=\"myinterview-chatbot-scheduling__times\">\n {timePoints.get(selectedDay)!.map((timePoint) => (\n <div\n key={timePoint}\n className={classNames('myinterview-chatbot-scheduling__time', { 'myinterview-chatbot-scheduling--selected-item': timePoint === selectedTimePoint })}\n onClick={() => onSelectTimePoint(timePoint)}\n role=\"presentation\"\n >\n <Text className=\"myinterview-chatbot-scheduling__time-value\" size=\"P1-M\">{DateTime.fromISO(timePoint).toLocaleString(DateTime.TIME_SIMPLE)}</Text>\n </div>\n ))}\n </div>\n )}\n\n {!!selectedDay && (\n <Button\n className=\"myinterview-chatbot-scheduling__submit-buttton\"\n size=\"small\"\n disabled={!selectedTimePoint || isScheduled || isSubmiting}\n onClick={onSubmitDate}\n >\n {isScheduled ? 'Scheduled' : isSubmiting ? 'Scheduling...' : 'Schedule'}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default Scheduling;\n"],"names":["transformCalendarRequest","data","results","start","day","DateTime","getCalendarAvailability","authorization","response","axiosInstanceVius","scheduleInterview","date","conversation_attributes","module_id","ARROW_MOVE_DISTANCE","Scheduling","id","completed","auth","useAppSelector","state","selectedConversationId","timePoints","setTimePoints","useState","isFetching","setIsFetching","isSubmiting","setIsSubmiting","isScheduled","setIsScheduled","selectedDay","setSelectedDay","selectedTimePoint","setSelectedTimePoint","offsetX","setOffsetX","translateX","setTranslateX","lastTouchX","useRef","daysRef","resizeObserver","useEffect","res","onDaySelected","onSelectTimePoint","timepoint","resetTransitionDuration","handleTouchMove","touchX","movementX","prev","handleTouchEnd","onNavigate","value","onSubmitDate","conversationAttributes","_a","conversationsMap","handleDayRef","useCallback","node","entry","clientWidth","scrollWidth","_jsx","_jsxs","classNames","BackButton","idx","_Fragment","Text","Skeleton","timePoint","Button"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs as d, jsx as n } from "react/jsx-runtime";
|
|
2
2
|
import { useRef as I, useState as u, useEffect as x } from "react";
|
|
3
|
-
import { a as C, u as A, b as k, i as q, c as D, M as E, S as V, P as j, C as T } from "./main.react-
|
|
3
|
+
import { a as C, u as A, b as k, i as q, c as D, M as E, S as V, P as j, C as T } from "./main.react-DoE2iju5.js";
|
|
4
4
|
var a;
|
|
5
5
|
(function(e) {
|
|
6
6
|
e.IframeModule = "0", e.MobileModule = "1", e.RedirectionModule = "2", e.LiveMobileModule = "3";
|
|
@@ -38,4 +38,4 @@ const m = {
|
|
|
38
38
|
export {
|
|
39
39
|
H as default
|
|
40
40
|
};
|
|
41
|
-
//# sourceMappingURL=index-
|
|
41
|
+
//# sourceMappingURL=index-CkbL7iJf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-CkbL7iJf.js","sources":["../src/interfaces/modules/idAnalyzer.ts","../src/services/idAnalayzer.service.ts","../src/components/modules/IDAnalayzer/index.tsx"],"sourcesContent":["import { ChatModule, IDAnalayzerMethod, ModuleName, ModuleType } from './generic';\n\nexport enum DocuPassModuleType {\n IframeModule = '0',\n MobileModule = '1',\n RedirectionModule = '2',\n LiveMobileModule = '3',\n}\n\nexport const DocuPassModuleTypeResponse: { [k in DocuPassModuleType]: 'iframe' | 'qrcode' | 'url' } = {\n [DocuPassModuleType.IframeModule]: 'iframe',\n [DocuPassModuleType.MobileModule]: 'qrcode',\n [DocuPassModuleType.RedirectionModule]: 'url',\n [DocuPassModuleType.LiveMobileModule]: 'qrcode',\n} as const;\n\nexport type IDAnalayzerModule = ChatModule<ModuleName.ID_ANALYZER, ModuleType.ID_ANALYZER, IDAnalayzerMethod>;\n","import { DocuPassModuleType } from '../interfaces/modules/idAnalyzer';\nimport { axiosInstanceVius } from './axiosInstances.service';\n\nexport const createAnalyzer = async (docPassModuleType: DocuPassModuleType, verificationMethods: string, authorization: string, video_id: string) => axiosInstanceVius.post('/modules/idanalyzer/createVerificationSession', { type: docPassModuleType, documentType: verificationMethods, video_id }, { headers: { authorization } });\n\nexport const confirmAnalyzer = async (authorization: string, controller: AbortController, video_id: string) => axiosInstanceVius.get(`/modules/idanalyzer?video_id=${video_id}`, { headers: { authorization }, timeout: 1e6, signal: controller.signal });\n","import { useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@myinterview/component-library';\n// import { createPortal } from 'react-dom';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\nimport { DocuPassModuleType, DocuPassModuleTypeResponse } from '../../../interfaces/modules/idAnalyzer';\nimport { isMobile } from '../../../utils/device.utils';\nimport { useAppSelector } from '../../../store/hooks';\nimport { confirmAnalyzer, createAnalyzer } from '../../../services/idAnalayzer.service';\nimport { conversationsMap } from '../../../utils/sdkObject.utils';\nimport { ReduxConversationAttributes } from '../../../interfaces/mainInterface';\nimport MediaImage from '../../MediaImage';\nimport CloseButton from '../../common/CloseButton';\nimport Skeleton from '../../ui/Skeleton';\n\nconst IDAnalayzer = ({ data, completed }: MessageModuleProps<ModuleType.ID_ANALYZER>) => {\n const auth = useAppSelector((state) => state.chatbotConfig.auth);\n const selectedConversationId = useAppSelector((state) => state.main.selectedConversationId);\n const idAnalyzerController = useRef(new AbortController());\n const videoId = (conversationsMap.get(selectedConversationId)?.attributes as ReduxConversationAttributes).video_id;\n const docModuleType = useRef<DocuPassModuleType>(isMobile ? DocuPassModuleType.IframeModule : DocuPassModuleType.LiveMobileModule);\n const [idAnalyzerUrl, setIdAnalazyerUrl] = useState<string>('');\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [mediaLoaded, setIsMediaLoaded] = useState<boolean>(false);\n\n const isQRCode = DocuPassModuleTypeResponse[docModuleType.current] === 'qrcode';\n\n const clearIdAnalyzer = () => {\n idAnalyzerController.current.abort();\n setIsOpen(false);\n };\n\n const checkAnalyzerValidation = () => {\n idAnalyzerController.current = new AbortController();\n confirmAnalyzer(auth, idAnalyzerController.current, videoId)\n .then(clearIdAnalyzer)\n .catch((e) => {\n if (e.code !== 'ERR_CANCELED') {\n checkAnalyzerValidation();\n }\n });\n };\n\n const setAnalyzer = () => {\n const verificationMethods = data.methods?.join('');\n createAnalyzer(docModuleType.current, verificationMethods, auth, videoId).then((res) => {\n setIdAnalazyerUrl(res.data.data[DocuPassModuleTypeResponse[docModuleType.current]]);\n });\n };\n\n const openIDAnalayzer = () => {\n setIsOpen(true);\n checkAnalyzerValidation();\n };\n\n useEffect(() => {\n setAnalyzer();\n }, []);\n\n const idAnalayzerClassNames = classNames('myinterview-chatbot-id-analyzer', {\n 'myinterview-chatbot-id-analyzer--qr-code': isQRCode,\n });\n\n if (isQRCode) {\n return (\n <div className={idAnalayzerClassNames}>\n <MediaImage mediaUrl={idAnalyzerUrl} title=\"QR-Code\" disableFetching onMediaReady={() => setIsMediaLoaded(true)} />\n {!mediaLoaded && <Skeleton transparent />}\n </div>\n );\n }\n\n return (\n <div className={idAnalayzerClassNames}>\n <Button onClick={openIDAnalayzer} size=\"small\" disabled={!idAnalyzerUrl || completed}>{data.buttonText || 'Verify ID'}</Button>\n {isOpen\n && (\n <div className=\"myinterview-chatbot-id-analyzer__iframe-container\">\n <CloseButton classNames=\"myinterview-chatbot-id-analyzer__close\" onClick={clearIdAnalyzer} size={16} />\n\n {DocuPassModuleTypeResponse[docModuleType.current] === 'iframe'\n ? <div className=\"myinterview-chatbot-id-analyzer__iframe-wrapper\" dangerouslySetInnerHTML={{ __html: idAnalyzerUrl }} />\n : <iframe src={idAnalyzerUrl} title=\"ID Analyzer\" />}\n </div>\n )}\n </div>\n );\n};\n\nexport default IDAnalayzer;\n"],"names":["DocuPassModuleType","DocuPassModuleTypeResponse","createAnalyzer","docPassModuleType","verificationMethods","authorization","video_id","axiosInstanceVius","confirmAnalyzer","controller","IDAnalayzer","data","completed","auth","useAppSelector","state","selectedConversationId","idAnalyzerController","useRef","videoId","_a","conversationsMap","docModuleType","isMobile","idAnalyzerUrl","setIdAnalazyerUrl","useState","isOpen","setIsOpen","mediaLoaded","setIsMediaLoaded","isQRCode","clearIdAnalyzer","checkAnalyzerValidation","e","setAnalyzer","res","openIDAnalayzer","useEffect","idAnalayzerClassNames","classNames","_jsxs","_jsx","MediaImage","Skeleton","Button","CloseButton"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs as m, jsx as l } from "react/jsx-runtime";
|
|
2
|
-
import { c as a, Z as v, t as w, P as S } from "./main.react-
|
|
2
|
+
import { c as a, Z as v, t as w, P as S } from "./main.react-DoE2iju5.js";
|
|
3
3
|
import { useState as o } from "react";
|
|
4
4
|
const N = ({ data: i, completed: c, onSubmitAnswer: d }) => {
|
|
5
5
|
const [n, h] = o(c), [s, r] = o(() => /* @__PURE__ */ new Set()), u = s.size >= (i.minSelected ?? 1) && s.size <= (i.maxSelected ?? i.options.length), b = (e) => {
|
|
@@ -19,4 +19,4 @@ const N = ({ data: i, completed: c, onSubmitAnswer: d }) => {
|
|
|
19
19
|
export {
|
|
20
20
|
N as default
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=index-
|
|
22
|
+
//# sourceMappingURL=index-DAGKBbVh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-DAGKBbVh.js","sources":["../src/components/modules/MultiSelect/index.tsx"],"sourcesContent":["import { Button, Text, Vi } from '@myinterview/component-library';\nimport { useState } from 'react';\nimport classNames from 'classnames';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\n\nconst MultiSelect = ({ data, completed, onSubmitAnswer }: MessageModuleProps<ModuleType.MULTI_SELECT>) => {\n const [isDisabled, setIsDisabled] = useState<boolean>(completed);\n const [selectedOptionIds, setSelectedOptionIds] = useState<Set<typeof data['options'][number]['id']>>(() => new Set());\n const isValid = selectedOptionIds.size >= (data.minSelected ?? 1) && selectedOptionIds.size <= (data.maxSelected ?? data.options.length);\n\n const handleChange = (id: typeof data['options'][number]['id']) => {\n if (isDisabled) return;\n if (selectedOptionIds.has(id)) {\n setSelectedOptionIds((prev) => new Set(Array.from(prev).filter((_id) => _id !== id)));\n } else {\n setSelectedOptionIds((prev) => new Set([...prev, id]));\n }\n };\n\n const handleSubmit = () => {\n if (!selectedOptionIds) return;\n const options = data.options.map((option) => ({ ...option, selected: selectedOptionIds.has(option.id) }));\n onSubmitAnswer(\n {\n ...data,\n options,\n selected_ids: Array.from(selectedOptionIds),\n },\n options.filter(({ selected }) => selected).map((o) => o.title).join(', '),\n );\n setIsDisabled(true);\n };\n\n return (\n <div className=\"myinterview-chatbot-multi-select\">\n <div className={classNames('myinterview-chatbot-multi-select__list', { 'myinterview-chatbot-multi-select__list--disabled': isDisabled || completed })}>\n {data.options.map((option) => (\n <div\n key={option.id}\n className=\"myinterview-chatbot-multi-select__item\"\n onClick={() => handleChange(option.id)}\n role=\"presentation\"\n >\n <div className={classNames('myinterview-chatbot-multi-select__checkmark', { 'myinterview-chatbot-multi-select__checkmark--selected': selectedOptionIds.has(option.id) })}>\n <Vi />\n </div>\n <Text className=\"myinterview-chatbot-multi-select__title\">{option.title}</Text>\n </div>\n ))}\n </div>\n\n <Button\n size=\"small\"\n onClick={handleSubmit}\n disabled={isDisabled || !isValid || completed}\n >\n {data.buttonText || 'Submit'}\n </Button>\n </div>\n );\n};\n\nexport default MultiSelect;\n"],"names":["MultiSelect","data","completed","onSubmitAnswer","isDisabled","setIsDisabled","useState","selectedOptionIds","setSelectedOptionIds","isValid","handleChange","id","prev","_id","handleSubmit","options","option","selected","o","_jsxs","_jsx","classNames","Vi","Text","Button"],"mappings":";;;AAMA,MAAMA,IAAc,CAAC,EAAE,MAAAC,GAAM,WAAAC,GAAW,gBAAAC,QAAiE;AACvG,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAkBJ,CAAS,GACzD,CAACK,GAAmBC,CAAoB,IAAIF,EAAoD,MAAM,oBAAI,KAAK,GAC/GG,IAAUF,EAAkB,SAASN,EAAK,eAAe,MAAMM,EAAkB,SAASN,EAAK,eAAeA,EAAK,QAAQ,SAE3HS,IAAe,CAACC,MAA4C;AAChE,IAAIP,MACAG,EAAkB,IAAII,CAAE,IAC1BH,EAAqB,CAACI,MAAS,IAAI,IAAI,MAAM,KAAKA,CAAI,EAAE,OAAO,CAACC,MAAQA,MAAQF,CAAE,CAAC,CAAC,IAEpFH,EAAqB,CAACI,MAAS,oBAAI,IAAI,CAAC,GAAGA,GAAMD,CAAE,CAAC,CAAC;AAAA,EAEzD,GAEMG,IAAe,MAAK;AACxB,QAAI,CAACP;AAAmB;AACxB,UAAMQ,IAAUd,EAAK,QAAQ,IAAI,CAACe,OAAY,EAAE,GAAGA,GAAQ,UAAUT,EAAkB,IAAIS,EAAO,EAAE,IAAI;AACxG,IAAAb,EACE;AAAA,MACE,GAAGF;AAAA,MACH,SAAAc;AAAA,MACA,cAAc,MAAM,KAAKR,CAAiB;AAAA,IAAA,GAE5CQ,EAAQ,OAAO,CAAC,EAAE,UAAAE,QAAeA,CAAQ,EAAE,IAAI,CAACC,MAAMA,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,GAE3Eb,EAAc,EAAI;AAAA,EACpB;AAEA,SACEc,EAAA,OAAA,EAAK,WAAU,oCAAkC,UAAA,CAC/CC,EAAA,OAAA,EAAK,WAAWC,EAAW,0CAA0C,EAAE,oDAAoDjB,KAAcF,EAAA,CAAW,GAAC,UAClJD,EAAK,QAAQ,IAAI,CAACe,MACjBG,EAAA,OAAA,EAEE,WAAU,0CACV,SAAS,MAAMT,EAAaM,EAAO,EAAE,GACrC,MAAK,gBAAc,UAAA,CAEnBI,EAAA,OAAA,EAAK,WAAWC,EAAW,+CAA+C,EAAE,yDAAyDd,EAAkB,IAAIS,EAAO,EAAE,EAAA,CAAG,GAAC,UACtKI,EAACE,GAAE,EAAA,EAAA,CAAG,GAERF,EAACG,GAAI,EAAC,WAAU,2CAAyC,UAAEP,EAAO,MAAA,CAAK,CAAQ,EAAA,GAR1EA,EAAO,EAAE,CAUjB,EAAA,CAAC,GAGJI,EAACI,GAAM,EACL,MAAK,SACL,SAASV,GACT,UAAUV,KAAc,CAACK,KAAWP,GAAS,UAE5CD,EAAK,cAAc,UAAQ,CACrB,GAAA;AAGf;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
-
import { P as l } from "./main.react-
|
|
2
|
+
import { P as l } from "./main.react-DoE2iju5.js";
|
|
3
3
|
const s = ({ data: i, completed: o, customAction: c }) => {
|
|
4
4
|
var e;
|
|
5
5
|
return t("div", { className: "myinterview-chatbot-tnc-module", children: t(l, { size: "small", onClick: c, disabled: o, children: ((e = i.buttonText) == null ? void 0 : e.cta) ?? "Review Terms" }) });
|
|
@@ -7,4 +7,4 @@ const s = ({ data: i, completed: o, customAction: c }) => {
|
|
|
7
7
|
export {
|
|
8
8
|
s as default
|
|
9
9
|
};
|
|
10
|
-
//# sourceMappingURL=index-
|
|
10
|
+
//# sourceMappingURL=index-DWNxQdON.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-DWNxQdON.js","sources":["../src/components/modules/Tnc/index.tsx"],"sourcesContent":["import { Button } from '@myinterview/component-library';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\n\nconst Tnc = ({ data, completed, customAction }: MessageModuleProps<ModuleType.TNC>) => (\n <div className=\"myinterview-chatbot-tnc-module\">\n <Button\n size=\"small\"\n onClick={customAction}\n disabled={completed}\n >\n {data.buttonText?.cta ?? 'Review Terms'}\n </Button>\n </div>\n);\n\nexport default Tnc;\n"],"names":["Tnc","data","completed","customAction","_jsx","Button","_a"],"mappings":";;AAIA,MAAMA,IAAM,CAAC,EAAE,MAAAC,GAAM,WAAAC,GAAW,cAAAC,EAAA,MAAY;;AAC1CC,SAAAA,EAAA,OAAA,EAAK,WAAU,kCAAgC,UAC7CA,EAACC,GAAM,EACL,MAAK,SACL,SAASF,GACT,UAAUD,GAAS,YAElBI,IAAAL,EAAK,eAAL,gBAAAK,EAAiB,QAAO,eAAA,CAAc,GAChC;AAAA;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs as b, jsx as e, Fragment as X } from "react/jsx-runtime";
|
|
2
2
|
import { useRef as i, useState as S, useCallback as d, useEffect as j, useMemo as $ } from "react";
|
|
3
|
-
import { i as k, B as O, c as P, t as B, P as U, A as F } from "./main.react-
|
|
3
|
+
import { i as k, B as O, c as P, t as B, P as U, A as F } from "./main.react-DoE2iju5.js";
|
|
4
4
|
const H = 300, J = 0.25, L = 2, V = 30, G = ({ children: c, sliderHeight: o, currentIndex: a = 0, itemSize: p = 1 / 0, gap: m = 0, onIndexChanged: _ }) => {
|
|
5
5
|
const n = i(), h = i(null), u = i(a), [N, y] = S(0), w = i(null), r = i(0), s = i(0), x = i(0), g = i(0), v = Math.min(p, N) + m, R = d(() => {
|
|
6
6
|
n.current && (n.current.style.transform = `translate3d(${s.current}px, 0px, 0px)`);
|
|
@@ -75,4 +75,4 @@ const H = 300, J = 0.25, L = 2, V = 30, G = ({ children: c, sliderHeight: o, cur
|
|
|
75
75
|
export {
|
|
76
76
|
Y as default
|
|
77
77
|
};
|
|
78
|
-
//# sourceMappingURL=index-
|
|
78
|
+
//# sourceMappingURL=index-D_7jEcrY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-Cuw7GmwU.js","sources":["../src/components/ui/Slider/index.tsx","../src/components/ui/PageDotsIndicator/index.tsx","../src/components/modules/Jobs/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport BackButton from '../../common/BackButton';\nimport { isMobile } from '../../../utils/device.utils';\n\ninterface ISlider {\n children: JSX.Element[];\n sliderHeight: number;\n currentIndex: number;\n itemSize?: number;\n gap?: number;\n onIndexChanged: (index: number) => void;\n}\n\nconst TRANSITION_DURATION = 300; // ms\nconst EDGE_TRANFORM_RATIO = 0.25;\nconst PREDICTION_DISTANCE = 2;\nconst PREDICTION_TIMEOUT = 30; // ms\n\nconst Slider = ({ children, sliderHeight, currentIndex = 0, itemSize = Infinity, gap = 0, onIndexChanged }: ISlider) => {\n const listRef = useRef<HTMLDivElement>();\n const resizeObserver = useRef<ResizeObserver | null>(null);\n const indexRef = useRef<number>(currentIndex);\n const [viewSize, setViewSize] = useState<number>(0);\n const lastTouchX = useRef<number | null>(null);\n const lastTouchTime = useRef<number>(0);\n const transformX = useRef<number>(0);\n const maxOffsetX = useRef<number>(0);\n const predictionValue = useRef<-1 | 0 | 1>(0);\n const itemWidth = Math.min(itemSize, viewSize) + gap;\n\n const updatePosition = useCallback(() => {\n if (!listRef.current) return;\n listRef.current.style.transform = `translate3d(${transformX.current}px, 0px, 0px)`;\n }, []);\n\n const adjustTransform = useCallback(() => {\n if (!listRef.current) return;\n const idx = Math.min(Math.max(Math.round(-transformX.current / (itemWidth)) + predictionValue.current, 0), children.length - 1);\n indexRef.current = Math.min(Math.max(idx, indexRef.current - 1), indexRef.current + 1);\n transformX.current = -indexRef.current * (itemWidth);\n listRef.current.style.transitionDuration = `${TRANSITION_DURATION}ms`;\n onIndexChanged(indexRef.current);\n updatePosition();\n }, [itemWidth]);\n\n useEffect(() => {\n maxOffsetX.current = itemWidth * (children.length - 1) - gap;\n adjustTransform();\n }, [itemWidth]);\n\n const handleListRef = useCallback((node: HTMLDivElement) => {\n listRef.current = node;\n if (!listRef.current) {\n resizeObserver.current?.disconnect();\n return;\n }\n resizeObserver.current = new ResizeObserver(([entry]) => {\n setViewSize(entry.contentRect.width);\n });\n resizeObserver.current.observe(listRef.current);\n }, []);\n\n const handleTouchStart = useCallback((e: React.TouchEvent<HTMLDivElement>) => {\n e.currentTarget.style.transitionDuration = '0ms';\n lastTouchX.current = e.touches[0].pageX;\n }, []);\n\n const handleTouchMove = useCallback((e: React.TouchEvent<HTMLDivElement>) => {\n const { pageX } = e.touches[0];\n const movmentX = pageX - lastTouchX.current!;\n lastTouchX.current = pageX;\n lastTouchTime.current = e.timeStamp;\n const posX = transformX.current + movmentX;\n const movementRatio = (posX > 0) || (-posX > maxOffsetX.current) ? EDGE_TRANFORM_RATIO : 1;\n transformX.current += movmentX * movementRatio;\n predictionValue.current = Math.abs(movmentX) < PREDICTION_DISTANCE ? 0 : movmentX < 0 ? 1 : -1;\n updatePosition();\n }, []);\n\n const handleTouchEnd = useCallback((e: React.TouchEvent<HTMLDivElement>) => {\n e.preventDefault();\n const { timeStamp } = e;\n if (timeStamp - lastTouchTime.current > PREDICTION_TIMEOUT) {\n predictionValue.current = 0;\n }\n adjustTransform();\n }, [adjustTransform]);\n\n const onNavigate = (value: 1 | -1) => {\n predictionValue.current = value;\n adjustTransform();\n };\n\n return (\n <div className=\"myinterview-chatbot-slider\">\n {!isMobile\n && (\n <>\n {currentIndex !== 0 && <BackButton size={20} classNames=\"myinterview-chatbot-slider__navigation-button\" onClick={() => onNavigate(-1)} />}\n {currentIndex !== children.length - 1 && <BackButton size={20} classNames=\"myinterview-chatbot-slider__navigation-button myinterview-chatbot-slider__navigation-button--next\" onClick={() => onNavigate(1)} />}\n </>\n )}\n <div\n ref={handleListRef}\n className=\"myinterview-chatbot-slider__list\"\n style={{ height: `${sliderHeight}px` }}\n /* TODO: check passive optimization */\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {children.map((c, idx) => (\n <div\n key={c.key}\n className=\"myinterview-chatbot-slider__item\"\n style={{\n transform: `translate3d(${idx * (itemWidth)}px, 0px, 0px)`,\n width: `${itemWidth - gap}px`,\n }}\n >\n {c}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport default Slider;\n","import classNames from 'classnames';\nimport { CSSProperties, useCallback, useEffect, useMemo, useRef } from 'react';\n\ninterface IPageDotsIndicator {\n totalDots: number;\n currentDotIndex: number;\n dotSize?: number;\n gap?: number;\n}\n\nconst PageDotsIndicator = ({ totalDots, currentDotIndex, dotSize = 8, gap = 4 }: IPageDotsIndicator) => {\n const dots = useMemo(() => [...Array(totalDots)].map((_, idx) => idx), [totalDots]);\n const mainRef = useRef<HTMLDivElement>();\n const dotsRef = useRef<HTMLDivElement>(null);\n const resizeObserver = useRef<ResizeObserver | null>(null);\n const viewSize = useRef<number>(0);\n const itemSize = dotSize + gap;\n\n const adjustDots = useCallback(() => {\n if (!dotsRef.current) return;\n const offset = Math.min(dotsRef.current.offsetLeft, 0);\n const transformX = Math.min(Math.max(-currentDotIndex * itemSize - offset + viewSize.current / 2, offset), -offset);\n dotsRef.current.style.transform = `translate3d(${transformX}px, 0px, 0px)`;\n }, [currentDotIndex, itemSize]);\n\n useEffect(adjustDots, [currentDotIndex, adjustDots]);\n\n const handleMainRef = useCallback((node: HTMLDivElement) => {\n mainRef.current = node;\n if (!mainRef.current) {\n resizeObserver.current?.disconnect();\n return;\n }\n\n resizeObserver.current = new ResizeObserver(([entry]) => {\n viewSize.current = entry.contentRect.width;\n adjustDots();\n });\n resizeObserver.current.observe(mainRef.current);\n }, []);\n\n return (\n <div ref={handleMainRef} className=\"myinterview-chatbot-page-dots-indicator\">\n <div\n ref={dotsRef}\n className=\"myinterview-chatbot-page-dots-indicator__wrapper\"\n style={{ gap: `${gap}px`, '--myinterview-chatbot-dot-size': `${dotSize}px` } as CSSProperties}\n >\n {dots.map((dot) => (\n <span\n key={dot}\n className={classNames(\n 'myinterview-chatbot-page-dots-indicator__item',\n { 'myinterview-chatbot-page-dots-indicator__item--selected': dot === currentDotIndex },\n )}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default PageDotsIndicator;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useState } from 'react';\nimport { Button, Text } from '@myinterview/component-library';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\nimport Slider from '../../ui/Slider';\nimport ArrowIcon from '../../ui/icons/ArrowIcon';\nimport PageDotsIndicator from '../../ui/PageDotsIndicator';\n\nconst Jobs = ({ completed, data }: MessageModuleProps<ModuleType.JOBS>) => {\n const [currentIndex, setCorrentIndex] = useState<number>(0);\n console.log('JOBS::completed', completed);\n\n return (\n <div className=\"myinterview-chatbot-jobs\">\n <div className=\"myinterview-chatbot-jobs__main\">\n <Slider\n sliderHeight={230}\n currentIndex={currentIndex}\n gap={20}\n onIndexChanged={setCorrentIndex}\n >\n {data.jobs.map((job) => (\n <div\n key={job.job_id ?? (job as any).id}\n className=\"myinterview-chatbot-jobs__item\"\n >\n <Text size=\"H5\" className=\"myinterview-chatbot-jobs__item-header\">\n {job.title}\n </Text>\n <div className=\"myinterview-chatbot-jobs__item-info\">\n <span>USA</span>\n <span>2 Days ago</span>\n </div>\n <div className=\"myinterview-chatbot-jobs__item-actions\">\n <Button size=\"small\">I'm interested</Button>\n <div className=\"myinterview-chatbot-jobs__item-read-more\">\n <span>Read more</span>\n <ArrowIcon />\n </div>\n </div>\n </div>\n ))}\n </Slider>\n\n <PageDotsIndicator totalDots={data.jobs.length} currentDotIndex={currentIndex} />\n </div>\n </div>\n );\n};\n\nexport default Jobs;\n"],"names":["TRANSITION_DURATION","EDGE_TRANFORM_RATIO","PREDICTION_DISTANCE","PREDICTION_TIMEOUT","Slider","children","sliderHeight","currentIndex","itemSize","gap","onIndexChanged","listRef","useRef","resizeObserver","indexRef","viewSize","setViewSize","useState","lastTouchX","lastTouchTime","transformX","maxOffsetX","predictionValue","itemWidth","updatePosition","useCallback","adjustTransform","idx","useEffect","handleListRef","node","_a","entry","handleTouchStart","e","handleTouchMove","pageX","movmentX","posX","movementRatio","handleTouchEnd","timeStamp","onNavigate","value","_jsxs","isMobile","_jsx","BackButton","c","PageDotsIndicator","totalDots","currentDotIndex","dotSize","dots","useMemo","_","mainRef","dotsRef","adjustDots","offset","handleMainRef","dot","classNames","Jobs","completed","data","setCorrentIndex","job","Text","Button","ArrowIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-D_7jEcrY.js","sources":["../src/components/ui/Slider/index.tsx","../src/components/ui/PageDotsIndicator/index.tsx","../src/components/modules/Jobs/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport BackButton from '../../common/BackButton';\nimport { isMobile } from '../../../utils/device.utils';\n\ninterface ISlider {\n children: JSX.Element[];\n sliderHeight: number;\n currentIndex: number;\n itemSize?: number;\n gap?: number;\n onIndexChanged: (index: number) => void;\n}\n\nconst TRANSITION_DURATION = 300; // ms\nconst EDGE_TRANFORM_RATIO = 0.25;\nconst PREDICTION_DISTANCE = 2;\nconst PREDICTION_TIMEOUT = 30; // ms\n\nconst Slider = ({ children, sliderHeight, currentIndex = 0, itemSize = Infinity, gap = 0, onIndexChanged }: ISlider) => {\n const listRef = useRef<HTMLDivElement>();\n const resizeObserver = useRef<ResizeObserver | null>(null);\n const indexRef = useRef<number>(currentIndex);\n const [viewSize, setViewSize] = useState<number>(0);\n const lastTouchX = useRef<number | null>(null);\n const lastTouchTime = useRef<number>(0);\n const transformX = useRef<number>(0);\n const maxOffsetX = useRef<number>(0);\n const predictionValue = useRef<-1 | 0 | 1>(0);\n const itemWidth = Math.min(itemSize, viewSize) + gap;\n\n const updatePosition = useCallback(() => {\n if (!listRef.current) return;\n listRef.current.style.transform = `translate3d(${transformX.current}px, 0px, 0px)`;\n }, []);\n\n const adjustTransform = useCallback(() => {\n if (!listRef.current) return;\n const idx = Math.min(Math.max(Math.round(-transformX.current / (itemWidth)) + predictionValue.current, 0), children.length - 1);\n indexRef.current = Math.min(Math.max(idx, indexRef.current - 1), indexRef.current + 1);\n transformX.current = -indexRef.current * (itemWidth);\n listRef.current.style.transitionDuration = `${TRANSITION_DURATION}ms`;\n onIndexChanged(indexRef.current);\n updatePosition();\n }, [itemWidth]);\n\n useEffect(() => {\n maxOffsetX.current = itemWidth * (children.length - 1) - gap;\n adjustTransform();\n }, [itemWidth]);\n\n const handleListRef = useCallback((node: HTMLDivElement) => {\n listRef.current = node;\n if (!listRef.current) {\n resizeObserver.current?.disconnect();\n return;\n }\n resizeObserver.current = new ResizeObserver(([entry]) => {\n setViewSize(entry.contentRect.width);\n });\n resizeObserver.current.observe(listRef.current);\n }, []);\n\n const handleTouchStart = useCallback((e: React.TouchEvent<HTMLDivElement>) => {\n e.currentTarget.style.transitionDuration = '0ms';\n lastTouchX.current = e.touches[0].pageX;\n }, []);\n\n const handleTouchMove = useCallback((e: React.TouchEvent<HTMLDivElement>) => {\n const { pageX } = e.touches[0];\n const movmentX = pageX - lastTouchX.current!;\n lastTouchX.current = pageX;\n lastTouchTime.current = e.timeStamp;\n const posX = transformX.current + movmentX;\n const movementRatio = (posX > 0) || (-posX > maxOffsetX.current) ? EDGE_TRANFORM_RATIO : 1;\n transformX.current += movmentX * movementRatio;\n predictionValue.current = Math.abs(movmentX) < PREDICTION_DISTANCE ? 0 : movmentX < 0 ? 1 : -1;\n updatePosition();\n }, []);\n\n const handleTouchEnd = useCallback((e: React.TouchEvent<HTMLDivElement>) => {\n e.preventDefault();\n const { timeStamp } = e;\n if (timeStamp - lastTouchTime.current > PREDICTION_TIMEOUT) {\n predictionValue.current = 0;\n }\n adjustTransform();\n }, [adjustTransform]);\n\n const onNavigate = (value: 1 | -1) => {\n predictionValue.current = value;\n adjustTransform();\n };\n\n return (\n <div className=\"myinterview-chatbot-slider\">\n {!isMobile\n && (\n <>\n {currentIndex !== 0 && <BackButton size={20} classNames=\"myinterview-chatbot-slider__navigation-button\" onClick={() => onNavigate(-1)} />}\n {currentIndex !== children.length - 1 && <BackButton size={20} classNames=\"myinterview-chatbot-slider__navigation-button myinterview-chatbot-slider__navigation-button--next\" onClick={() => onNavigate(1)} />}\n </>\n )}\n <div\n ref={handleListRef}\n className=\"myinterview-chatbot-slider__list\"\n style={{ height: `${sliderHeight}px` }}\n /* TODO: check passive optimization */\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {children.map((c, idx) => (\n <div\n key={c.key}\n className=\"myinterview-chatbot-slider__item\"\n style={{\n transform: `translate3d(${idx * (itemWidth)}px, 0px, 0px)`,\n width: `${itemWidth - gap}px`,\n }}\n >\n {c}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport default Slider;\n","import classNames from 'classnames';\nimport { CSSProperties, useCallback, useEffect, useMemo, useRef } from 'react';\n\ninterface IPageDotsIndicator {\n totalDots: number;\n currentDotIndex: number;\n dotSize?: number;\n gap?: number;\n}\n\nconst PageDotsIndicator = ({ totalDots, currentDotIndex, dotSize = 8, gap = 4 }: IPageDotsIndicator) => {\n const dots = useMemo(() => [...Array(totalDots)].map((_, idx) => idx), [totalDots]);\n const mainRef = useRef<HTMLDivElement>();\n const dotsRef = useRef<HTMLDivElement>(null);\n const resizeObserver = useRef<ResizeObserver | null>(null);\n const viewSize = useRef<number>(0);\n const itemSize = dotSize + gap;\n\n const adjustDots = useCallback(() => {\n if (!dotsRef.current) return;\n const offset = Math.min(dotsRef.current.offsetLeft, 0);\n const transformX = Math.min(Math.max(-currentDotIndex * itemSize - offset + viewSize.current / 2, offset), -offset);\n dotsRef.current.style.transform = `translate3d(${transformX}px, 0px, 0px)`;\n }, [currentDotIndex, itemSize]);\n\n useEffect(adjustDots, [currentDotIndex, adjustDots]);\n\n const handleMainRef = useCallback((node: HTMLDivElement) => {\n mainRef.current = node;\n if (!mainRef.current) {\n resizeObserver.current?.disconnect();\n return;\n }\n\n resizeObserver.current = new ResizeObserver(([entry]) => {\n viewSize.current = entry.contentRect.width;\n adjustDots();\n });\n resizeObserver.current.observe(mainRef.current);\n }, []);\n\n return (\n <div ref={handleMainRef} className=\"myinterview-chatbot-page-dots-indicator\">\n <div\n ref={dotsRef}\n className=\"myinterview-chatbot-page-dots-indicator__wrapper\"\n style={{ gap: `${gap}px`, '--myinterview-chatbot-dot-size': `${dotSize}px` } as CSSProperties}\n >\n {dots.map((dot) => (\n <span\n key={dot}\n className={classNames(\n 'myinterview-chatbot-page-dots-indicator__item',\n { 'myinterview-chatbot-page-dots-indicator__item--selected': dot === currentDotIndex },\n )}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default PageDotsIndicator;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useState } from 'react';\nimport { Button, Text } from '@myinterview/component-library';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\nimport Slider from '../../ui/Slider';\nimport ArrowIcon from '../../ui/icons/ArrowIcon';\nimport PageDotsIndicator from '../../ui/PageDotsIndicator';\n\nconst Jobs = ({ completed, data }: MessageModuleProps<ModuleType.JOBS>) => {\n const [currentIndex, setCorrentIndex] = useState<number>(0);\n console.log('JOBS::completed', completed);\n\n return (\n <div className=\"myinterview-chatbot-jobs\">\n <div className=\"myinterview-chatbot-jobs__main\">\n <Slider\n sliderHeight={230}\n currentIndex={currentIndex}\n gap={20}\n onIndexChanged={setCorrentIndex}\n >\n {data.jobs.map((job) => (\n <div\n key={job.job_id ?? (job as any).id}\n className=\"myinterview-chatbot-jobs__item\"\n >\n <Text size=\"H5\" className=\"myinterview-chatbot-jobs__item-header\">\n {job.title}\n </Text>\n <div className=\"myinterview-chatbot-jobs__item-info\">\n <span>USA</span>\n <span>2 Days ago</span>\n </div>\n <div className=\"myinterview-chatbot-jobs__item-actions\">\n <Button size=\"small\">I'm interested</Button>\n <div className=\"myinterview-chatbot-jobs__item-read-more\">\n <span>Read more</span>\n <ArrowIcon />\n </div>\n </div>\n </div>\n ))}\n </Slider>\n\n <PageDotsIndicator totalDots={data.jobs.length} currentDotIndex={currentIndex} />\n </div>\n </div>\n );\n};\n\nexport default Jobs;\n"],"names":["TRANSITION_DURATION","EDGE_TRANFORM_RATIO","PREDICTION_DISTANCE","PREDICTION_TIMEOUT","Slider","children","sliderHeight","currentIndex","itemSize","gap","onIndexChanged","listRef","useRef","resizeObserver","indexRef","viewSize","setViewSize","useState","lastTouchX","lastTouchTime","transformX","maxOffsetX","predictionValue","itemWidth","updatePosition","useCallback","adjustTransform","idx","useEffect","handleListRef","node","_a","entry","handleTouchStart","e","handleTouchMove","pageX","movmentX","posX","movementRatio","handleTouchEnd","timeStamp","onNavigate","value","_jsxs","isMobile","_jsx","BackButton","c","PageDotsIndicator","totalDots","currentDotIndex","dotSize","dots","useMemo","_","mainRef","dotsRef","adjustDots","offset","handleMainRef","dot","classNames","Jobs","completed","data","setCorrentIndex","job","Text","Button","ArrowIcon"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs as o, jsx as i } from "react/jsx-runtime";
|
|
2
|
-
import { c as d, t as M, P as k } from "./main.react-
|
|
2
|
+
import { c as d, t as M, P as k } from "./main.react-DoE2iju5.js";
|
|
3
3
|
import { useState as h, useRef as A } from "react";
|
|
4
4
|
const j = () => o("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-maximize2-icon lucide-maximize-2", children: [i("path", { d: "M15 3h6v6" }), i("path", { d: "m21 3-7 7" }), i("path", { d: "m3 21 7-7" }), i("path", { d: "M9 21H3v-6" })] }), O = ({ data: m, completed: p, onSubmitAnswer: x }) => {
|
|
5
5
|
const [w, _] = h(p), [r, b] = h(!1), [c, u] = h(() => /* @__PURE__ */ new Map()), y = !!Array.from(c.values()).flat().length, v = A(null), f = (t, s) => {
|
|
@@ -34,4 +34,4 @@ const j = () => o("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", hei
|
|
|
34
34
|
export {
|
|
35
35
|
O as default
|
|
36
36
|
};
|
|
37
|
-
//# sourceMappingURL=index-
|
|
37
|
+
//# sourceMappingURL=index-DxAr8LqJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-DxAr8LqJ.js","sources":["../src/components/ui/icons/MaximizeIcon/index.tsx","../src/components/modules/Matrix/index.tsx"],"sourcesContent":["const MaximizeIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"lucide lucide-maximize2-icon lucide-maximize-2\">\n <path d=\"M15 3h6v6\" />\n <path d=\"m21 3-7 7\" />\n <path d=\"m3 21 7-7\" />\n <path d=\"M9 21H3v-6\" />\n </svg>\n);\n\nexport default MaximizeIcon;\n","import { Button, Text } from '@myinterview/component-library';\nimport { useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { MessageModuleProps } from '../../../interfaces/modules';\nimport { ModuleType } from '../../../interfaces/modules/generic';\nimport MaximizeIcon from '../../ui/icons/MaximizeIcon';\n\nconst Matrix = ({ data, completed, onSubmitAnswer }: MessageModuleProps<ModuleType.QUESTION>) => {\n const [isDisabled, setIsDisabled] = useState<boolean>(completed);\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedMap, setSelectedMap] = useState<Map<typeof data['questions'][number]['id'], typeof data['questions'][number]['answers'][number]['id'][]>>(() => new Map());\n const isValid = !!Array.from(selectedMap.values()).flat().length;\n const matrixTargetRef = useRef<HTMLSpanElement>(null);\n\n const selectAnswer = (questionId: typeof data['questions'][number]['id'], answerId: typeof data['questions'][number]['answers'][number]['id']) => {\n const mapToSet = new Map(selectedMap);\n const selectedAnswersIds = mapToSet.get(questionId) ?? [];\n const answersIds = selectedAnswersIds.includes(answerId)\n ? selectedAnswersIds.filter((id) => id !== answerId)\n : selectedAnswersIds.concat(answerId);\n mapToSet.set(questionId, answersIds);\n setSelectedMap(mapToSet);\n };\n\n const handleOpen = () => {\n if (isOpen) return;\n setIsOpen((prev) => !prev);\n requestAnimationFrame(() => {\n matrixTargetRef.current?.scrollIntoView({ block: 'nearest' });\n });\n };\n\n const handleSubmit = () => {\n const questionsAnswersMap = new Map(data.questions.map((q) => [q.id, { ...q, answers: new Map(q.answers.map((a) => [a.id, a])) }]));\n const questions = data.questions.map((question) => ({\n ...question,\n answers: question.answers.map((answer) => ({ ...answer, selected: selectedMap.get(question.id)?.includes(answer.id) ?? false })),\n selected_ids: selectedMap.get(question.id) ?? [],\n }));\n\n const textAnswer = Array.from(selectedMap.entries()).map(([questionId, answersIds]) => !!answersIds.length && [\n questionsAnswersMap.get(questionId)!.title,\n answersIds.map((answerId) => questionsAnswersMap.get(questionId)!.answers.get(answerId)!.title).join(', '),\n ].join(': ')).join('\\n');\n\n onSubmitAnswer({ ...data, questions }, textAnswer);\n setIsDisabled(true);\n };\n\n return (\n <div\n className={classNames('myinterview-chatbot-matrix', isOpen && 'myinterview-chatbot-matrix--open')}\n onClick={handleOpen}\n role=\"presentation\"\n >\n <span className=\"myinterview-chatbot-matrix__target\" ref={matrixTargetRef} />\n <div\n className={classNames('myinterview-chatbot-matrix__wrapper', isOpen && 'myinterview-chatbot-matrix__wrapper--open')}\n >\n <div className=\"myinterview-chatbot-matrix__main\">\n <div className=\"myinterview-chatbot-matrix__list\">\n {data.questions.map((question) => (\n <div\n key={question.id}\n className=\"myinterview-chatbot-matrix__item\"\n >\n <Text size=\"H6\" className=\"myinterview-chatbot-matrix__question-title\">{question.title}</Text>\n <div className=\"myinterview-chatbot-matrix__answers\">\n {question.answers.map((answer) => {\n const isSelected = selectedMap.get(question.id)?.includes(answer.id);\n return (\n <button\n key={answer.id}\n className={classNames('myinterview-chatbot-matrix__answer', isSelected && 'myinterview-chatbot-matrix__answer--selected')}\n onClick={() => selectAnswer(question.id, answer.id)}\n type=\"button\"\n disabled={isDisabled || !isOpen}\n >\n {answer.title}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n\n <Button\n size=\"small\"\n onClick={handleSubmit}\n disabled={isDisabled || !isValid || !isOpen || completed}\n >\n {data.buttonText || 'Submit'}\n </Button>\n </div>\n\n {!isOpen && (\n <div className=\"myinterview-chatbot-matrix__screen\">\n <div className=\"myinterview-chatbot-matrix__expand-icon\">\n <MaximizeIcon />\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default Matrix;\n"],"names":["MaximizeIcon","_jsxs","_jsx","Matrix","data","completed","onSubmitAnswer","isDisabled","setIsDisabled","useState","isOpen","setIsOpen","selectedMap","setSelectedMap","isValid","matrixTargetRef","useRef","selectAnswer","questionId","answerId","mapToSet","selectedAnswersIds","answersIds","id","handleOpen","prev","_a","handleSubmit","questionsAnswersMap","q","questions","question","answer","textAnswer","classNames","Text","isSelected","Button"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._myinterview-chatbot--component-mode_1hygk_1{width:100%;height:100%}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
2
|
-
import { d as a, e } from "./main.react-
|
|
2
|
+
import { d as a, e } from "./main.react-DoE2iju5.js";
|
|
3
3
|
export {
|
|
4
4
|
a as ChatbotClient,
|
|
5
5
|
e as usePopupChatbot
|
|
@@ -43634,7 +43634,7 @@ let xl = NN;
|
|
|
43634
43634
|
const wwe = (e) => {
|
|
43635
43635
|
let t = e;
|
|
43636
43636
|
try {
|
|
43637
|
-
t ?? (t = "
|
|
43637
|
+
t ?? (t = "production");
|
|
43638
43638
|
} catch {
|
|
43639
43639
|
}
|
|
43640
43640
|
xl = (() => {
|
|
@@ -82173,7 +82173,7 @@ var Pc;
|
|
|
82173
82173
|
const V2 = {
|
|
82174
82174
|
tnc: () => {
|
|
82175
82175
|
}
|
|
82176
|
-
}, c8e = ia(() => import("./index-
|
|
82176
|
+
}, c8e = ia(() => import("./index-DWNxQdON.js")), u8e = ia(() => import("./index-D_7jEcrY.js")), l8e = ia(() => import("./index-CkbL7iJf.js")), d8e = ia(() => import("./index-B1PhDqQU.js")), f8e = ia(() => import("./index-DAGKBbVh.js")), p8e = ia(() => import("./index-Bfpo0a5Z.js")), h8e = ia(() => import("./index-82K4VMPr.js")), m8e = ia(() => import("./index-BuelnB5n.js")), g8e = ia(() => import("./index-DxAr8LqJ.js")), MT = {
|
|
82177
82177
|
[Ko.TNC]: {
|
|
82178
82178
|
component: c8e,
|
|
82179
82179
|
customAction: Pc.SHOW_TNC
|
|
@@ -83639,7 +83639,7 @@ const s$e = ({ markdownText: e }) => he("div", { dangerouslySetInnerHTML: (Lr.se
|
|
|
83639
83639
|
}, _$e = () => {
|
|
83640
83640
|
xU() && PU(), lY({
|
|
83641
83641
|
dsn: xl.SENTRY_DSN,
|
|
83642
|
-
environment: "
|
|
83642
|
+
environment: "production",
|
|
83643
83643
|
release: "0.1.83",
|
|
83644
83644
|
integrations: [
|
|
83645
83645
|
sY(),
|
|
@@ -83828,4 +83828,4 @@ export {
|
|
|
83828
83828
|
_n as t,
|
|
83829
83829
|
Vr as u
|
|
83830
83830
|
};
|
|
83831
|
-
//# sourceMappingURL=main.react-
|
|
83831
|
+
//# sourceMappingURL=main.react-DoE2iju5.js.map
|