react-native-chatbot-ai 0.1.22 → 0.1.24
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/lib/module/components/Drawer/DeleteSessionPopup.js +5 -5
- package/lib/module/components/Drawer/DeleteSessionPopup.js.map +1 -1
- package/lib/module/components/Drawer/RenameSessionPopup.js +34 -24
- package/lib/module/components/Drawer/RenameSessionPopup.js.map +1 -1
- package/lib/module/components/Drawer/SessionItem.js +6 -5
- package/lib/module/components/Drawer/SessionItem.js.map +1 -1
- package/lib/module/components/Drawer/SessionList.js +5 -4
- package/lib/module/components/Drawer/SessionList.js.map +1 -1
- package/lib/module/components/Drawer/SessionOptionsBottomSheet.js +13 -7
- package/lib/module/components/Drawer/SessionOptionsBottomSheet.js.map +1 -1
- package/lib/module/components/Drawer/ShareSessionPopup.js +6 -6
- package/lib/module/components/Drawer/ShareSessionPopup.js.map +1 -1
- package/lib/module/components/chat/footer/index.js +40 -33
- package/lib/module/components/chat/footer/index.js.map +1 -1
- package/lib/module/components/chat/item/ChatAIAnswerMessageItem.js +26 -13
- package/lib/module/components/chat/item/ChatAIAnswerMessageItem.js.map +1 -1
- package/lib/module/components/chat/item/DeeplinkItem.js +3 -3
- package/lib/module/components/chat/item/DeeplinkItem.js.map +1 -1
- package/lib/module/components/chat/item/MessageActionsBar.js +9 -9
- package/lib/module/components/chat/item/MessageActionsBar.js.map +1 -1
- package/lib/module/components/portal/Popup.js +8 -3
- package/lib/module/components/portal/Popup.js.map +1 -1
- package/lib/module/components/product/CardHorizontal.js +50 -46
- package/lib/module/components/product/CardHorizontal.js.map +1 -1
- package/lib/module/hooks/message/useStreamMessage.js +13 -2
- package/lib/module/hooks/message/useStreamMessage.js.map +1 -1
- package/lib/module/hooks/messageActions/useAudioPlayer.js +109 -24
- package/lib/module/hooks/messageActions/useAudioPlayer.js.map +1 -1
- package/lib/module/hooks/messageActions/useFeedback.js +2 -2
- package/lib/module/hooks/messageActions/useFeedback.js.map +1 -1
- package/lib/module/hooks/messageActions/useShareMessage.js +1 -1
- package/lib/module/hooks/messageActions/useShareMessage.js.map +1 -1
- package/lib/module/store/session.js +1 -1
- package/lib/module/store/session.js.map +1 -1
- package/lib/module/utils/ui.js.map +1 -1
- package/lib/typescript/src/components/Drawer/RenameSessionPopup.d.ts +1 -1
- package/lib/typescript/src/components/Drawer/RenameSessionPopup.d.ts.map +1 -1
- package/lib/typescript/src/components/Drawer/SessionItem.d.ts.map +1 -1
- package/lib/typescript/src/components/Drawer/SessionList.d.ts.map +1 -1
- package/lib/typescript/src/components/Drawer/SessionOptionsBottomSheet.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/item/ChatAIAnswerMessageItem.d.ts.map +1 -1
- package/lib/typescript/src/components/portal/Popup.d.ts +4 -0
- package/lib/typescript/src/components/portal/Popup.d.ts.map +1 -1
- package/lib/typescript/src/components/product/CardHorizontal.d.ts +1 -0
- package/lib/typescript/src/components/product/CardHorizontal.d.ts.map +1 -1
- package/lib/typescript/src/hooks/message/useStreamMessage.d.ts.map +1 -1
- package/lib/typescript/src/hooks/messageActions/useAudioPlayer.d.ts +1 -0
- package/lib/typescript/src/hooks/messageActions/useAudioPlayer.d.ts.map +1 -1
- package/lib/typescript/src/store/products.d.ts +1 -1
- package/lib/typescript/src/store/products.d.ts.map +1 -1
- package/lib/typescript/src/types/ui.d.ts +3 -2
- package/lib/typescript/src/types/ui.d.ts.map +1 -1
- package/lib/typescript/src/utils/ui.d.ts +3 -2
- package/lib/typescript/src/utils/ui.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/components/Drawer/DeleteSessionPopup.tsx +5 -5
- package/src/components/Drawer/RenameSessionPopup.tsx +49 -40
- package/src/components/Drawer/SessionItem.tsx +5 -4
- package/src/components/Drawer/SessionList.tsx +8 -3
- package/src/components/Drawer/SessionOptionsBottomSheet.tsx +12 -6
- package/src/components/Drawer/ShareSessionPopup.tsx +6 -6
- package/src/components/chat/footer/index.tsx +37 -35
- package/src/components/chat/item/ChatAIAnswerMessageItem.tsx +29 -13
- package/src/components/chat/item/DeeplinkItem.tsx +3 -3
- package/src/components/chat/item/MessageActionsBar.tsx +9 -9
- package/src/components/portal/Popup.tsx +14 -4
- package/src/components/product/CardHorizontal.tsx +46 -45
- package/src/hooks/message/useStreamMessage.ts +17 -5
- package/src/hooks/messageActions/useAudioPlayer.ts +116 -22
- package/src/hooks/messageActions/useFeedback.ts +2 -2
- package/src/hooks/messageActions/useSendFeedback.ts +1 -1
- package/src/hooks/messageActions/useShareMessage.ts +1 -1
- package/src/store/products.ts +1 -1
- package/src/store/session.ts +1 -1
- package/src/types/ui.ts +3 -2
- package/src/utils/ui.tsx +3 -2
|
@@ -102,7 +102,7 @@ export const useShareMessage = (messageId, messageContent, productImages) => {
|
|
|
102
102
|
}
|
|
103
103
|
logGA(GAEvents.chatDetailShareMessBtnTap, {
|
|
104
104
|
conversation_id: useSessionStore.getState().sessionId,
|
|
105
|
-
|
|
105
|
+
message_chat_id: messageId
|
|
106
106
|
});
|
|
107
107
|
} else {
|
|
108
108
|
setShareState(messageId, ShareState.idle);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","Share","RNFetchBlob","useMessageActionsStore","ShareState","UIUtils","cleanMarkdown","truncateText","useChatContext","GAEvents","useSessionStore","MAX_SHARE_TEXT_LENGTH","useShareMessage","messageId","messageContent","productImages","logGA","shareState","state","getShareState","setShareState","currentState","idle","shareMessage","trim","length","toast","showError","loading","cleanText","truncatedText","localImagePaths","i","imageUrl","console","warn","timestamp","Date","now","imagePath","fs","dirs","CacheDir","config","path","fetch","fileExists","exists","fileInfo","stat","size","unlink","push","imageError","error","shareOptions","title","message","failOnCancel","url","urls","result","open","success","localImagePath","cleanPath","replace","cleanupError","chatDetailShareMessBtnTap","conversation_id","getState","sessionId","
|
|
1
|
+
{"version":3,"names":["useCallback","Share","RNFetchBlob","useMessageActionsStore","ShareState","UIUtils","cleanMarkdown","truncateText","useChatContext","GAEvents","useSessionStore","MAX_SHARE_TEXT_LENGTH","useShareMessage","messageId","messageContent","productImages","logGA","shareState","state","getShareState","setShareState","currentState","idle","shareMessage","trim","length","toast","showError","loading","cleanText","truncatedText","localImagePaths","i","imageUrl","console","warn","timestamp","Date","now","imagePath","fs","dirs","CacheDir","config","path","fetch","fileExists","exists","fileInfo","stat","size","unlink","push","imageError","error","shareOptions","title","message","failOnCancel","url","urls","result","open","success","localImagePath","cleanPath","replace","cleanupError","chatDetailShareMessBtnTap","conversation_id","getState","sessionId","message_chat_id","includes","isLoading"],"sourceRoot":"../../../../src","sources":["hooks/messageActions/useShareMessage.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,QAAQ,OAAO;AACnC,OAAOC,KAAK,MAAM,oBAAoB;AACtC,OAAOC,WAAW,MAAM,wBAAwB;AAChD,OAAOC,sBAAsB,MAAM,+BAA4B;AAC/D,SAASC,UAAU,QAAQ,+BAA4B;AACvD,OAAOC,OAAO,MAAM,mBAAgB;AACpC,SAASC,aAAa,EAAEC,YAAY,QAAQ,4BAAyB;AACrE,SAASC,cAAc,QAAQ,8BAA2B;AAC1D,SAASC,QAAQ,QAAQ,2BAAwB;AACjD,OAAOC,eAAe,MAAM,wBAAqB;AAEjD,MAAMC,qBAAqB,GAAG,IAAI;AAElC,OAAO,MAAMC,eAAe,GAAGA,CAC7BC,SAAiB,EACjBC,cAAsB,EACtBC,aAAwB,KACrB;EACH,MAAMC,KAAK,GAAGR,cAAc,CAAC,CAAC,CAACQ,KAAK;EACpC,MAAMC,UAAU,GAAGd,sBAAsB,CAAEe,KAAK,IAC9CA,KAAK,CAACC,aAAa,CAACN,SAAS,CAC/B,CAAC;EACD,MAAMO,aAAa,GAAGjB,sBAAsB,CAAEe,KAAK,IAAKA,KAAK,CAACE,aAAa,CAAC;EAE5E,MAAMC,YAAY,GAAGJ,UAAU,EAAEC,KAAK,IAAId,UAAU,CAACkB,IAAI;EAEzD,MAAMC,YAAY,GAAGvB,WAAW,CAAC,YAAY;IAC3C,IAAI,CAACc,cAAc,IAAIA,cAAc,CAACU,IAAI,CAAC,CAAC,CAACC,MAAM,KAAK,CAAC,EAAE;MACzDpB,OAAO,CAACqB,KAAK,CAACC,SAAS,CAAC,8BAA8B,CAAC;MACvD;IACF;IAEA,IAAI;MACFP,aAAa,CAACP,SAAS,EAAET,UAAU,CAACwB,OAAO,CAAC;;MAE5C;MACA,MAAMC,SAAS,GAAGvB,aAAa,CAACQ,cAAc,CAAC;MAC/C,MAAMgB,aAAa,GAAGvB,YAAY,CAACsB,SAAS,EAAElB,qBAAqB,CAAC;MAEpE,MAAMoB,eAAyB,GAAG,EAAE;;MAEpC;MACA,IAAIhB,aAAa,IAAIA,aAAa,CAACU,MAAM,GAAG,CAAC,EAAE;QAC7C,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGjB,aAAa,CAACU,MAAM,EAAEO,CAAC,EAAE,EAAE;UAC7C,MAAMC,QAAQ,GAAGlB,aAAa,CAACiB,CAAC,CAAC;UACjC,IAAI,CAACC,QAAQ,IAAIA,QAAQ,CAACT,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACvCU,OAAO,CAACC,IAAI,CAAC,6CAA6CH,CAAC,EAAE,CAAC;YAC9D;UACF;UAEA,IAAI;YACF;YACA,MAAMI,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGN,CAAC;YAChC,MAAMO,SAAS,GAAG,GAAGrC,WAAW,CAACsC,EAAE,CAACC,IAAI,CAACC,QAAQ,gBAAgBN,SAAS,MAAM;YAEhF,MAAMlC,WAAW,CAACyC,MAAM,CAAC;cACvBC,IAAI,EAAEL;YACR,CAAC,CAAC,CAACM,KAAK,CAAC,KAAK,EAAEZ,QAAQ,CAAC;;YAEzB;YACA,MAAMa,UAAU,GAAG,MAAM5C,WAAW,CAACsC,EAAE,CAACO,MAAM,CAACR,SAAS,CAAC;YACzD,IAAI,CAACO,UAAU,EAAE;cACf;YACF;YAEA,MAAME,QAAQ,GAAG,MAAM9C,WAAW,CAACsC,EAAE,CAACS,IAAI,CAACV,SAAS,CAAC;YACrD,IAAIS,QAAQ,CAACE,IAAI,KAAK,CAAC,EAAE;cACvB,MAAMhD,WAAW,CAACsC,EAAE,CAACW,MAAM,CAACZ,SAAS,CAAC;cACtC;YACF;YAEAR,eAAe,CAACqB,IAAI,CAAC,UAAUb,SAAS,EAAE,CAAC;UAC7C,CAAC,CAAC,OAAOc,UAAU,EAAE;YACnBnB,OAAO,CAACoB,KAAK,CACX,oCAAoCtB,CAAC,KAAKC,QAAQ,IAAI,EACtDoB,UACF,CAAC;YACD;UACF;QACF;MACF;;MAEA;MACA,MAAME,YAAiB,GAAG;QACxBC,KAAK,EAAE,uBAAuB;QAC9BC,OAAO,EAAE3B,aAAa;QACtB4B,YAAY,EAAE;MAChB,CAAC;;MAED;MACA,IAAI3B,eAAe,CAACN,MAAM,KAAK,CAAC,EAAE;QAChC8B,YAAY,CAACI,GAAG,GAAG5B,eAAe,CAAC,CAAC,CAAC;MACvC,CAAC,MAAM,IAAIA,eAAe,CAACN,MAAM,GAAG,CAAC,EAAE;QACrC8B,YAAY,CAACK,IAAI,GAAG7B,eAAe;MACrC;;MAEA;MACA;MACA,MAAM8B,MAAM,GAAG,MAAM5D,KAAK,CAAC6D,IAAI,CAACP,YAAY,CAAC;;MAE7C;MACA,IAAIM,MAAM,EAAE;QACVzC,aAAa,CAACP,SAAS,EAAET,UAAU,CAAC2D,OAAO,CAAC;;QAE5C;QACA,KAAK,MAAMC,cAAc,IAAIjC,eAAe,EAAE;UAC5C,IAAI;YACF,MAAMkC,SAAS,GAAGD,cAAc,CAACE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;YACvD,MAAMhE,WAAW,CAACsC,EAAE,CAACW,MAAM,CAACc,SAAS,CAAC;UACxC,CAAC,CAAC,OAAOE,YAAY,EAAE;YACrBjC,OAAO,CAACC,IAAI,CAAC,uCAAuC,EAAEgC,YAAY,CAAC;UACrE;QACF;QACAnD,KAAK,CAACP,QAAQ,CAAC2D,yBAAyB,EAAE;UACxCC,eAAe,EAAE3D,eAAe,CAAC4D,QAAQ,CAAC,CAAC,CAACC,SAAS;UACrDC,eAAe,EAAE3D;QACnB,CAAC,CAAC;MACJ,CAAC,MAAM;QACLO,aAAa,CAACP,SAAS,EAAET,UAAU,CAACkB,IAAI,CAAC;MAC3C;IACF,CAAC,CAAC,OAAOgC,KAAU,EAAE;MACnBpB,OAAO,CAACoB,KAAK,CAAC,cAAc,EAAEA,KAAK,CAAC;;MAEpC;MACA,IAAIA,KAAK,EAAEG,OAAO,EAAEgB,QAAQ,CAAC,oBAAoB,CAAC,EAAE;QAClDrD,aAAa,CAACP,SAAS,EAAET,UAAU,CAACkB,IAAI,CAAC;QACzC;MACF;MAEAF,aAAa,CAACP,SAAS,EAAET,UAAU,CAACkD,KAAK,CAAC;MAC1CjD,OAAO,CAACqB,KAAK,CAACC,SAAS,CAAC,sCAAsC,CAAC;IACjE;EACF,CAAC,EAAE,CAACd,SAAS,EAAEC,cAAc,EAAEC,aAAa,EAAEK,aAAa,EAAEJ,KAAK,CAAC,CAAC;EAEpE,OAAO;IACLC,UAAU,EAAEI,YAAY;IACxBqD,SAAS,EAAErD,YAAY,KAAKjB,UAAU,CAACwB,OAAO;IAC9CL;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -4,7 +4,7 @@ import { create } from 'zustand';
|
|
|
4
4
|
import { SessionLogType } from "../types/chat.js";
|
|
5
5
|
const useSessionStore = create(set => ({
|
|
6
6
|
sessionId: undefined,
|
|
7
|
-
setSessionId: (sessionId, sessionLogType
|
|
7
|
+
setSessionId: (sessionId, sessionLogType) => set({
|
|
8
8
|
sessionId,
|
|
9
9
|
sessionLogType
|
|
10
10
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["create","SessionLogType","useSessionStore","set","sessionId","undefined","setSessionId","sessionLogType","accessed"],"sourceRoot":"../../../src","sources":["store/session.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,SAAS;AAChC,SAASC,cAAc,QAAsB,kBAAe;AAE5D,MAAMC,eAAe,GAAGF,MAAM,CAAgBG,GAAG,KAAM;EACrDC,SAAS,EAAEC,SAAS;EACpBC,YAAY,EAAEA,CAACF,SAAS,EAAEG,cAAc,
|
|
1
|
+
{"version":3,"names":["create","SessionLogType","useSessionStore","set","sessionId","undefined","setSessionId","sessionLogType","accessed"],"sourceRoot":"../../../src","sources":["store/session.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,SAAS;AAChC,SAASC,cAAc,QAAsB,kBAAe;AAE5D,MAAMC,eAAe,GAAGF,MAAM,CAAgBG,GAAG,KAAM;EACrDC,SAAS,EAAEC,SAAS;EACpBC,YAAY,EAAEA,CAACF,SAAS,EAAEG,cAAc,KACtCJ,GAAG,CAAC;IAAEC,SAAS;IAAEG;EAAe,CAAC,CAAC;EACpCA,cAAc,EAAEN,cAAc,CAACO;AACjC,CAAC,CAAC,CAAC;AAEH,eAAeN,eAAe","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["bottomSheetRef","popupRef","toastRef","UIUtils","toast","open","params","current","dismiss","showError","error","withToast","msg","message","response","data","title","theme","stretch","showSuccess","bottomSheet","popup","dismissAll"],"sourceRoot":"../../../src","sources":["utils/ui.tsx"],"mappings":";;AAAA;;AAEA,SAASA,cAAc,EAAEC,QAAQ,EAAEC,QAAQ,QAAQ,uBAAc;AACjE;;
|
|
1
|
+
{"version":3,"names":["bottomSheetRef","popupRef","toastRef","UIUtils","toast","open","params","current","dismiss","showError","error","withToast","msg","message","response","data","title","theme","stretch","showSuccess","bottomSheet","popup","dismissAll"],"sourceRoot":"../../../src","sources":["utils/ui.tsx"],"mappings":";;AAAA;;AAEA,SAASA,cAAc,EAAEC,QAAQ,EAAEC,QAAQ,QAAQ,uBAAc;AACjE;;AAKA,MAAMC,OAAO,CAAC;EACZC,KAAK,GAAG;IACNC,IAAI,EAEFC,MAAyE,IACtE;MACHJ,QAAQ,CAACK,OAAO,EAAEF,IAAI,CAACC,MAAM,CAAC;IAChC,CAAC;IACDE,OAAO,EAAEA,CAAA,KAAM;MACbN,QAAQ,CAACK,OAAO,EAAEC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACDC,SAAS,EAAEA,CAACC,KAAU,EAAEC,SAAS,GAAG,IAAI,KAAK;MAC3C,MAAMC,GAAG,GACPF,KAAK,EAAEG,OAAO,IACdH,KAAK,EAAEI,QAAQ,EAAED,OAAO,IACxBH,KAAK,EAAEK,IAAI,EAAEF,OAAO,IACpBH,KAAK,EAAEI,QAAQ,EAAEC,IAAI,EAAEF,OAAO,IAC9B,iCAAiC;MACnCF,SAAS,IACPT,QAAQ,CAACK,OAAO,EAAEF,IAAI,CAAC;QAAEW,KAAK,EAAEJ,GAAG;QAAEK,KAAK,EAAE,QAAQ;QAAEC,OAAO,EAAE;MAAK,CAAC,CAAC;MACxE,OAAON,GAAG;IACZ,CAAC;IACDO,WAAW,EAAGN,OAAe,IAAK;MAChCX,QAAQ,CAACK,OAAO,EAAEF,IAAI,CAAC;QACrBW,KAAK,EAAEH,OAAO;QACdI,KAAK,EAAE,SAAS;QAChBC,OAAO,EAAE;MACX,CAAC,CAAC;IACJ;EACF,CAAC;EACDE,WAAW,GAAG;IACZf,IAAI,EAAGC,MAAgC,IAAK;MAC1CN,cAAc,CAACO,OAAO,EAAEF,IAAI,CAACC,MAAM,CAAC;IACtC,CAAC;IACDE,OAAO,EAAEA,CAAA,KAAM;MACbR,cAAc,CAACO,OAAO,EAAEC,OAAO,CAAC,CAAC;IACnC;EACF,CAAC;EACDa,KAAK,GAAG;IACNhB,IAAI,EAAGC,MAAmB,IAAK;MAC7BL,QAAQ,CAACM,OAAO,EAAEF,IAAI,CAACC,MAAM,CAAC;IAChC,CAAC;IACDE,OAAO,EAAEA,CAAA,KAAM;MACbP,QAAQ,CAACM,OAAO,EAAEC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACDc,UAAU,EAAEA,CAAA,KAAM;MAChBrB,QAAQ,CAACM,OAAO,EAAEe,UAAU,CAAC,CAAC;IAChC;EACF,CAAC;AACH;AAEA,eAAe,IAAInB,OAAO,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { SessionSearchItem } from '../../types/dto';
|
|
2
|
-
export declare const openRenameSessionPopup: (session: SessionSearchItem) => void;
|
|
2
|
+
export declare const openRenameSessionPopup: (session: SessionSearchItem, onClose?: () => void) => void;
|
|
3
3
|
//# sourceMappingURL=RenameSessionPopup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenameSessionPopup.d.ts","sourceRoot":"","sources":["../../../../../src/components/Drawer/RenameSessionPopup.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"RenameSessionPopup.d.ts","sourceRoot":"","sources":["../../../../../src/components/Drawer/RenameSessionPopup.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAqHpD,eAAO,MAAM,sBAAsB,GACjC,SAAS,iBAAiB,EAC1B,UAAU,MAAM,IAAI,SAcrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/Drawer/SessionItem.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIpD,UAAU,gBAAgB;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC5C;AAED,QAAA,MAAM,WAAW,wDAqCf,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/Drawer/SessionItem.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIpD,UAAU,gBAAgB;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC5C;AAED,QAAA,MAAM,WAAW,wDAqCf,CAAC;AA0BH,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList.d.ts","sourceRoot":"","sources":["../../../../../src/components/Drawer/SessionList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOpD,UAAU,gBAAgB;IACxB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"SessionList.d.ts","sourceRoot":"","sources":["../../../../../src/components/Drawer/SessionList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOpD,UAAU,gBAAgB;IACxB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,WAAW,wDAyChB,CAAC;AAWF,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionOptionsBottomSheet.d.ts","sourceRoot":"","sources":["../../../../../src/components/Drawer/SessionOptionsBottomSheet.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA4BpD,eAAO,MAAM,6BAA6B,GACxC,SAAS,iBAAiB,EAC1B,cAAc,MAAM,IAAI,EACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"SessionOptionsBottomSheet.d.ts","sourceRoot":"","sources":["../../../../../src/components/Drawer/SessionOptionsBottomSheet.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA4BpD,eAAO,MAAM,6BAA6B,GACxC,SAAS,iBAAiB,EAC1B,cAAc,MAAM,IAAI,EACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,SAiF9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatAIAnswerMessageItem.d.ts","sourceRoot":"","sources":["../../../../../../src/components/chat/item/ChatAIAnswerMessageItem.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAmB9C,UAAU,4BAA4B;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAyF1D;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,YA0CtD;
|
|
1
|
+
{"version":3,"file":"ChatAIAnswerMessageItem.d.ts","sourceRoot":"","sources":["../../../../../../src/components/chat/item/ChatAIAnswerMessageItem.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAmB9C,UAAU,4BAA4B;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAyF1D;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,YA0CtD;AA8ND,QAAA,MAAM,uBAAuB,GAAI,mBAG9B,4BAA4B,4CA0G9B,CAAC;AACF,eAAe,uBAAuB,CAAC"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
import { KPopupProps } from '@droppii/libs';
|
|
1
2
|
import { WithPopupProps } from '../../types';
|
|
3
|
+
export type IPopupProps = KPopupProps & {
|
|
4
|
+
onPressClose?: () => void;
|
|
5
|
+
};
|
|
2
6
|
declare const _default: import("react").NamedExoticComponent<import("react").RefAttributes<WithPopupProps>>;
|
|
3
7
|
export default _default;
|
|
4
8
|
//# sourceMappingURL=Popup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popup.d.ts","sourceRoot":"","sources":["../../../../../src/components/portal/Popup.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Popup.d.ts","sourceRoot":"","sources":["../../../../../src/components/portal/Popup.tsx"],"names":[],"mappings":"AAiCA,OAAO,EAOL,WAAW,EAGZ,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAa7C,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;;AAqOF,wBAA2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardHorizontal.d.ts","sourceRoot":"","sources":["../../../../../src/components/product/CardHorizontal.tsx"],"names":[],"mappings":"AAsBA,UAAU,2BAA2B;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"CardHorizontal.d.ts","sourceRoot":"","sources":["../../../../../src/components/product/CardHorizontal.tsx"],"names":[],"mappings":"AAsBA,UAAU,2BAA2B;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,qBAAqB,GAAI,OAAO,2BAA2B,4CAsUhE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStreamMessage.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/message/useStreamMessage.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"useStreamMessage.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/message/useStreamMessage.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AAQrB,eAAO,MAAM,gBAAgB;2BAgBd,oBAAoB,oBACX,MAAM,mBACP,MAAM;;+BAyIX,YAAY;CAwC7B,CAAC"}
|
|
@@ -9,6 +9,7 @@ interface UseAudioPlayerReturn {
|
|
|
9
9
|
togglePlayback: () => Promise<void>;
|
|
10
10
|
stopPlayback: () => void;
|
|
11
11
|
}
|
|
12
|
+
export declare const DefaultAudioServiceBehaviour: any;
|
|
12
13
|
export declare const useAudioPlayer: ({ messageId, }: UseAudioPlayerProps) => UseAudioPlayerReturn;
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=useAudioPlayer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAudioPlayer.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/messageActions/useAudioPlayer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAudioPlayer.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/messageActions/useAudioPlayer.ts"],"names":[],"mappings":"AAoBA,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,oBAAoB;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAKD,eAAO,MAAM,4BAA4B,KACoB,CAAC;AA4C9D,eAAO,MAAM,cAAc,GAAI,gBAE5B,mBAAmB,KAAG,oBAoWxB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ProductsStore } from '
|
|
1
|
+
import { ProductsStore } from '../types';
|
|
2
2
|
declare const useProductsStore: import("zustand").UseBoundStore<import("zustand").StoreApi<ProductsStore>>;
|
|
3
3
|
export default useProductsStore;
|
|
4
4
|
//# sourceMappingURL=products.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../../src/store/products.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../../src/store/products.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,QAAA,MAAM,gBAAgB,4EAGnB,CAAC;AAEJ,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { KBottomSheetProps,
|
|
1
|
+
import { KBottomSheetProps, KToastBarProps } from '@droppii/libs';
|
|
2
2
|
import { JSX } from 'react';
|
|
3
|
+
import { IPopupProps } from '../components/portal/Popup';
|
|
3
4
|
export interface WithToastProps {
|
|
4
5
|
open: (payload: KToastBarProps & {
|
|
5
6
|
contentContainerStyle?: StyleProp<ViewStyle>;
|
|
@@ -16,7 +17,7 @@ export interface WithBottomSheetProps {
|
|
|
16
17
|
dismiss: () => void;
|
|
17
18
|
}
|
|
18
19
|
export interface WithPopupProps {
|
|
19
|
-
open: (payload:
|
|
20
|
+
open: (payload: IPopupProps) => void;
|
|
20
21
|
dismiss: () => void;
|
|
21
22
|
dismissAll: () => void;
|
|
22
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/types/ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/types/ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAEJ,OAAO,EAAE,cAAc,GAAG;QAAE,qBAAqB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;KAAE,KACvE,IAAI,CAAC;IACV,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG;QACpC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC;KACvD,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { KToastBarProps } from '@droppii/libs';
|
|
2
2
|
import { KBottomSheetPropsEnhance } from '../types';
|
|
3
|
+
import { IPopupProps } from '../components/portal/Popup';
|
|
3
4
|
declare class UIUtils {
|
|
4
5
|
toast: {
|
|
5
6
|
open: (params: KToastBarProps & {
|
|
@@ -14,7 +15,7 @@ declare class UIUtils {
|
|
|
14
15
|
dismiss: () => void;
|
|
15
16
|
};
|
|
16
17
|
popup: {
|
|
17
|
-
open: (params:
|
|
18
|
+
open: (params: IPopupProps) => void;
|
|
18
19
|
dismiss: () => void;
|
|
19
20
|
dismissAll: () => void;
|
|
20
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/utils/ui.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/utils/ui.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,cAAM,OAAO;IACX,KAAK;uBAGO,cAAc,GAAG;YAAE,qBAAqB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;SAAE;;2BAOxD,GAAG;+BAWC,MAAM;MAO7B;IACF,WAAW;uBACM,wBAAwB;;MAMvC;IACF,KAAK;uBACY,WAAW;;;MAS1B;CACH;;AAED,wBAA6B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-chatbot-ai",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.24",
|
|
4
4
|
"description": "React Native library for Chatbot AI",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@commitlint/config-conventional": "^19.8.1",
|
|
63
|
-
"@droppii/libs": "git+ssh://git@github.com:droppii/mobile-components.git#v1.0.
|
|
63
|
+
"@droppii/libs": "git+ssh://git@github.com:droppii/mobile-components.git#v1.0.87",
|
|
64
64
|
"@eslint/compat": "^1.3.2",
|
|
65
65
|
"@eslint/eslintrc": "^3.3.1",
|
|
66
66
|
"@eslint/js": "^9.35.0",
|
|
@@ -34,7 +34,7 @@ const DeleteContent = ({ session, onConfirmRef }: DeleteContentProps) => {
|
|
|
34
34
|
setSessionId(undefined, SessionLogType.newChatBtn);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
UIUtils.toast.showSuccess(trans('
|
|
37
|
+
UIUtils.toast.showSuccess(trans('delete_session_success'));
|
|
38
38
|
UIUtils.popup.dismiss();
|
|
39
39
|
} catch (err) {
|
|
40
40
|
UIUtils.toast.showError(err);
|
|
@@ -42,7 +42,7 @@ const DeleteContent = ({ session, onConfirmRef }: DeleteContentProps) => {
|
|
|
42
42
|
}, [session.id, currentSessionId, deleteSession, setSessionId]);
|
|
43
43
|
|
|
44
44
|
const truncatedName = truncateText(session.title, 50);
|
|
45
|
-
const descriptionTemplate = trans('
|
|
45
|
+
const descriptionTemplate = trans('delete_session_description');
|
|
46
46
|
const parts = descriptionTemplate.split('{sessionName}');
|
|
47
47
|
|
|
48
48
|
return (
|
|
@@ -72,7 +72,7 @@ export const openDeleteSessionPopup = (
|
|
|
72
72
|
UIUtils.popup.open({
|
|
73
73
|
header: {
|
|
74
74
|
title: {
|
|
75
|
-
text: trans('
|
|
75
|
+
text: trans('delete_session_title'),
|
|
76
76
|
},
|
|
77
77
|
showCloseButton: false,
|
|
78
78
|
},
|
|
@@ -87,7 +87,7 @@ export const openDeleteSessionPopup = (
|
|
|
87
87
|
buttons: [
|
|
88
88
|
{
|
|
89
89
|
kind: 'light',
|
|
90
|
-
label: trans('
|
|
90
|
+
label: trans('delete_session_cancel'),
|
|
91
91
|
weight: 'medium',
|
|
92
92
|
onPress: () => {
|
|
93
93
|
UIUtils.popup.dismiss();
|
|
@@ -99,7 +99,7 @@ export const openDeleteSessionPopup = (
|
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
kind: 'danger',
|
|
102
|
-
label: trans('
|
|
102
|
+
label: trans('delete_session_confirm'),
|
|
103
103
|
weight: 'medium',
|
|
104
104
|
onPress: () => {
|
|
105
105
|
onConfirmRef.current?.();
|
|
@@ -13,73 +13,82 @@ import {
|
|
|
13
13
|
KSpacingValue,
|
|
14
14
|
} from '@droppii/libs';
|
|
15
15
|
import { useChatContext } from '../../context/ChatContext';
|
|
16
|
+
import { GAEvents } from '../../constants/events';
|
|
16
17
|
|
|
17
|
-
const MAX_LENGTH =
|
|
18
|
+
const MAX_LENGTH = 500;
|
|
18
19
|
const MIN_LENGTH = 1;
|
|
19
20
|
|
|
20
21
|
interface RenameSessionPopupProps {
|
|
21
22
|
session: SessionSearchItem;
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
const deepNormalize = (str: string) =>
|
|
26
|
+
str
|
|
27
|
+
.normalize('NFC')
|
|
28
|
+
.replace(/[\u200B-\u200D\uFEFF]/g, '') // zero-width
|
|
29
|
+
.replace(/\u00A0/g, ' ') // NBSP → normal space
|
|
30
|
+
.replace(/\s+/g, ' ') // unify multiple spaces
|
|
31
|
+
.trim();
|
|
32
|
+
|
|
24
33
|
const RenameSessionPopup = ({ session }: RenameSessionPopupProps) => {
|
|
25
34
|
const [value, setValue] = useState(session.title);
|
|
26
|
-
const [confirmDisabled, setConfirmDisabled] = useState(true);
|
|
27
35
|
const { mutateAsync: renameSession } = useRenameSession();
|
|
28
|
-
const { openDrawer } = useChatContext();
|
|
36
|
+
const { openDrawer, logGA } = useChatContext();
|
|
29
37
|
|
|
30
|
-
const onChangeText = useCallback(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
const onChangeText = useCallback((text: string) => {
|
|
39
|
+
let cleaned = text
|
|
40
|
+
.replace(/[\u200B-\u200D\uFEFF]/g, '')
|
|
41
|
+
.replace(/\u00A0/g, ' ');
|
|
42
|
+
cleaned = cleaned.slice(0, MAX_LENGTH);
|
|
43
|
+
setValue(cleaned);
|
|
44
|
+
}, []);
|
|
34
45
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
46
|
+
// normalized trimmed value used for all logic checks
|
|
47
|
+
const normalized = deepNormalize(value);
|
|
48
|
+
const original = deepNormalize(session.title);
|
|
49
|
+
const visibleLength = value.length;
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
const confirmDisabled =
|
|
52
|
+
normalized.length < MIN_LENGTH ||
|
|
53
|
+
normalized === original ||
|
|
54
|
+
value.length > MAX_LENGTH;
|
|
55
|
+
|
|
56
|
+
const counterText =
|
|
57
|
+
visibleLength === 0
|
|
58
|
+
? `Tối đa ${MAX_LENGTH} ký tự`
|
|
59
|
+
: `Còn ${MAX_LENGTH - visibleLength}/${MAX_LENGTH} ký tự`;
|
|
44
60
|
|
|
45
61
|
const onClear = useCallback(() => {
|
|
46
62
|
setValue('');
|
|
47
|
-
setConfirmDisabled(true);
|
|
48
63
|
}, []);
|
|
49
64
|
|
|
50
65
|
const handleConfirm = useCallback(async () => {
|
|
51
|
-
|
|
52
|
-
if (
|
|
53
|
-
confirmDisabled ||
|
|
54
|
-
!trimmed ||
|
|
55
|
-
trimmed.length < MIN_LENGTH ||
|
|
56
|
-
trimmed.length > MAX_LENGTH ||
|
|
57
|
-
trimmed === session.title.trim()
|
|
58
|
-
) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
66
|
+
if (confirmDisabled) return;
|
|
61
67
|
|
|
62
68
|
try {
|
|
63
69
|
await renameSession({
|
|
64
70
|
sessionId: session.id,
|
|
65
|
-
title:
|
|
71
|
+
title: normalized,
|
|
66
72
|
});
|
|
73
|
+
|
|
67
74
|
Keyboard.dismiss();
|
|
68
|
-
UIUtils.toast.showSuccess(trans('
|
|
75
|
+
UIUtils.toast.showSuccess(trans('rename_session_success'));
|
|
69
76
|
UIUtils.popup.dismiss();
|
|
70
|
-
setTimeout(() =>
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
setTimeout(() => openDrawer(), 500);
|
|
78
|
+
logGA(GAEvents.renameModalSaveBtnTap, {
|
|
79
|
+
conversation_id: session.id,
|
|
80
|
+
button: 'save',
|
|
81
|
+
});
|
|
73
82
|
} catch (err) {
|
|
74
83
|
UIUtils.toast.showError(err);
|
|
75
84
|
}
|
|
76
|
-
}, [confirmDisabled,
|
|
85
|
+
}, [confirmDisabled, normalized, session, renameSession, openDrawer, logGA]);
|
|
77
86
|
|
|
78
87
|
return (
|
|
79
88
|
<KContainer.View>
|
|
80
89
|
<KContainer.View style={[styles.searchInputWrapper]}>
|
|
81
90
|
<KInput.TextBox
|
|
82
|
-
placeholder={trans('
|
|
91
|
+
placeholder={trans('rename_session_placeholder')}
|
|
83
92
|
value={value}
|
|
84
93
|
onChangeText={onChangeText}
|
|
85
94
|
onClear={onClear}
|
|
@@ -92,11 +101,7 @@ const RenameSessionPopup = ({ session }: RenameSessionPopupProps) => {
|
|
|
92
101
|
multiline
|
|
93
102
|
textAlignVertical="top"
|
|
94
103
|
/>
|
|
95
|
-
<KLabel.Text color={KColors.gray.light}>
|
|
96
|
-
{value.trim().length === 0
|
|
97
|
-
? `Tối đa ${MAX_LENGTH} ký tự`
|
|
98
|
-
: `Còn ${MAX_LENGTH - value.length}/${MAX_LENGTH} ký tự`}
|
|
99
|
-
</KLabel.Text>
|
|
104
|
+
<KLabel.Text color={KColors.gray.light}>{counterText}</KLabel.Text>
|
|
100
105
|
</KContainer.View>
|
|
101
106
|
|
|
102
107
|
<KContainer.View style={styles.divider} />
|
|
@@ -114,10 +119,13 @@ const RenameSessionPopup = ({ session }: RenameSessionPopupProps) => {
|
|
|
114
119
|
);
|
|
115
120
|
};
|
|
116
121
|
|
|
117
|
-
export const openRenameSessionPopup = (
|
|
122
|
+
export const openRenameSessionPopup = (
|
|
123
|
+
session: SessionSearchItem,
|
|
124
|
+
onClose?: () => void
|
|
125
|
+
) => {
|
|
118
126
|
UIUtils.popup.open({
|
|
119
127
|
header: {
|
|
120
|
-
title: { text: trans('
|
|
128
|
+
title: { text: trans('rename_session_title') },
|
|
121
129
|
showCloseButton: true,
|
|
122
130
|
alignment: 'left',
|
|
123
131
|
},
|
|
@@ -125,6 +133,7 @@ export const openRenameSessionPopup = (session: SessionSearchItem) => {
|
|
|
125
133
|
scrollable: false,
|
|
126
134
|
renderContent: () => <RenameSessionPopup session={session} />,
|
|
127
135
|
},
|
|
136
|
+
onPressClose: onClose,
|
|
128
137
|
});
|
|
129
138
|
};
|
|
130
139
|
|
|
@@ -36,8 +36,8 @@ const SessionItem = memo<SessionItemProps>(({ item, isActive, onPress }) => {
|
|
|
36
36
|
>
|
|
37
37
|
{/* @ts-ignore */}
|
|
38
38
|
<KLabel.Text
|
|
39
|
-
typo=
|
|
40
|
-
color={KColors.gray.dark}
|
|
39
|
+
typo={isActive ? 'TextMdMedium' : 'TextMdNormal'}
|
|
40
|
+
color={isActive ? KColors.primary.normal : KColors.gray.dark}
|
|
41
41
|
numberOfLines={1}
|
|
42
42
|
>
|
|
43
43
|
{item.title}
|
|
@@ -64,12 +64,13 @@ const styles = StyleSheet.create({
|
|
|
64
64
|
alignItems: 'center',
|
|
65
65
|
height: 38,
|
|
66
66
|
// paddingVertical: KSpacingValue['0.75rem'],
|
|
67
|
-
|
|
68
|
-
borderRadius: KSpacingValue['0.5rem'],
|
|
67
|
+
paddingHorizontal: KSpacingValue['0.5rem'],
|
|
68
|
+
// borderRadius: KSpacingValue['0.5rem'],
|
|
69
69
|
// marginVertical: KSpacingValue['0.25rem'],
|
|
70
70
|
},
|
|
71
71
|
sessionItemActive: {
|
|
72
72
|
backgroundColor: KColors.hexToRgba(KColors.primary.normal, 0.1),
|
|
73
|
+
borderRadius: KSpacingValue['0.5rem'],
|
|
73
74
|
},
|
|
74
75
|
sessionItemTouchable: {
|
|
75
76
|
flex: 1,
|
|
@@ -24,7 +24,7 @@ interface SessionListProps {
|
|
|
24
24
|
const SessionList = memo<SessionListProps>(
|
|
25
25
|
({
|
|
26
26
|
sessions,
|
|
27
|
-
activeSessionId
|
|
27
|
+
activeSessionId,
|
|
28
28
|
isLoading,
|
|
29
29
|
isRefetching,
|
|
30
30
|
onPressSession,
|
|
@@ -33,9 +33,13 @@ const SessionList = memo<SessionListProps>(
|
|
|
33
33
|
}) => {
|
|
34
34
|
const renderItem = useCallback(
|
|
35
35
|
({ item }: { item: SessionSearchItem }) => (
|
|
36
|
-
<SessionItem
|
|
36
|
+
<SessionItem
|
|
37
|
+
item={item}
|
|
38
|
+
isActive={item?.id === activeSessionId}
|
|
39
|
+
onPress={onPressSession}
|
|
40
|
+
/>
|
|
37
41
|
),
|
|
38
|
-
[onPressSession]
|
|
42
|
+
[onPressSession, activeSessionId]
|
|
39
43
|
);
|
|
40
44
|
|
|
41
45
|
const keyExtractor = useCallback((item: SessionSearchItem) => item.id, []);
|
|
@@ -54,6 +58,7 @@ const SessionList = memo<SessionListProps>(
|
|
|
54
58
|
ItemSeparatorComponent={ItemSeparator}
|
|
55
59
|
estimatedItemSize={80}
|
|
56
60
|
ListEmptyComponent={!isLoading ? <EmptyState /> : null}
|
|
61
|
+
extraData={activeSessionId}
|
|
57
62
|
/>
|
|
58
63
|
);
|
|
59
64
|
}
|
|
@@ -46,7 +46,12 @@ export const openSessionOptionsBottomSheet = (
|
|
|
46
46
|
// Close drawer first, then open popup
|
|
47
47
|
closeDrawer?.();
|
|
48
48
|
setTimeout(() => {
|
|
49
|
-
openRenameSessionPopup(session)
|
|
49
|
+
openRenameSessionPopup(session, () => {
|
|
50
|
+
logGA?.(GAEvents.renameModalSaveBtnTap, {
|
|
51
|
+
conversation_id: session?.id,
|
|
52
|
+
button: 'escape',
|
|
53
|
+
});
|
|
54
|
+
});
|
|
50
55
|
}, 300);
|
|
51
56
|
logGA?.(GAEvents.chatDetailRenameBtnTap, {
|
|
52
57
|
conversation_id: session?.id,
|
|
@@ -80,21 +85,21 @@ export const openSessionOptionsBottomSheet = (
|
|
|
80
85
|
<KContainer.View style={styles.container}>
|
|
81
86
|
<OptionItem
|
|
82
87
|
icon="edit-o"
|
|
83
|
-
label={trans('
|
|
88
|
+
label={trans('session_rename')}
|
|
84
89
|
onPress={handleRename}
|
|
85
90
|
/>
|
|
86
91
|
{/* @ts-ignore */}
|
|
87
92
|
<KContainer.View style={styles.divider} />
|
|
88
93
|
<OptionItem
|
|
89
|
-
icon="share-o"
|
|
90
|
-
label={trans('
|
|
94
|
+
icon="share-glob-o"
|
|
95
|
+
label={trans('session_share')}
|
|
91
96
|
onPress={handleShare}
|
|
92
97
|
/>
|
|
93
98
|
{/* @ts-ignore */}
|
|
94
99
|
<KContainer.View style={styles.divider} />
|
|
95
100
|
<OptionItem
|
|
96
101
|
icon="trash-alt-o-1"
|
|
97
|
-
label={trans('
|
|
102
|
+
label={trans('session_delete')}
|
|
98
103
|
onPress={handleDelete}
|
|
99
104
|
isDanger
|
|
100
105
|
/>
|
|
@@ -105,9 +110,10 @@ export const openSessionOptionsBottomSheet = (
|
|
|
105
110
|
UIUtils.bottomSheet.open({
|
|
106
111
|
header: {
|
|
107
112
|
title: {
|
|
108
|
-
text: trans('
|
|
113
|
+
text: trans('session_options_title'),
|
|
109
114
|
},
|
|
110
115
|
showCloseButton: true,
|
|
116
|
+
alignment: 'left',
|
|
111
117
|
},
|
|
112
118
|
body: {
|
|
113
119
|
renderContent: () => <OptionsContent />,
|
|
@@ -42,7 +42,7 @@ const ShareContent = ({ session, onConfirmRef }: ShareContentProps) => {
|
|
|
42
42
|
if (response) {
|
|
43
43
|
// Copy the generated share URL to clipboard
|
|
44
44
|
Clipboard.setString(shareUrl);
|
|
45
|
-
UIUtils.toast.showSuccess(trans('
|
|
45
|
+
UIUtils.toast.showSuccess(trans('share_session_success'));
|
|
46
46
|
UIUtils.popup.dismiss();
|
|
47
47
|
logGA(GAEvents.shareChatModalCopyBtnTap, {
|
|
48
48
|
conversation_id: session.id,
|
|
@@ -54,7 +54,7 @@ const ShareContent = ({ session, onConfirmRef }: ShareContentProps) => {
|
|
|
54
54
|
}, [session.id, shareSession, shareUrl, logGA]);
|
|
55
55
|
|
|
56
56
|
const truncatedName = truncateText(session.title, 50);
|
|
57
|
-
const descriptionTemplate = trans('
|
|
57
|
+
const descriptionTemplate = trans('share_session_description');
|
|
58
58
|
const parts = descriptionTemplate.split('{sessionName}');
|
|
59
59
|
|
|
60
60
|
return (
|
|
@@ -79,7 +79,7 @@ const ShareContent = ({ session, onConfirmRef }: ShareContentProps) => {
|
|
|
79
79
|
<KContainer.View style={[styles.inputWrapper]}>
|
|
80
80
|
<KInput.TextBox
|
|
81
81
|
value={shareUrl}
|
|
82
|
-
label={trans('
|
|
82
|
+
label={trans('share_session_link_label')}
|
|
83
83
|
labelTypo="TextMdBold"
|
|
84
84
|
disabled
|
|
85
85
|
withBorder
|
|
@@ -100,7 +100,7 @@ export const openShareSessionPopup = (session: SessionSearchItem) => {
|
|
|
100
100
|
UIUtils.popup.open({
|
|
101
101
|
header: {
|
|
102
102
|
title: {
|
|
103
|
-
text: trans('
|
|
103
|
+
text: trans('share_session_title'),
|
|
104
104
|
},
|
|
105
105
|
showCloseButton: true,
|
|
106
106
|
alignment: 'left',
|
|
@@ -116,13 +116,13 @@ export const openShareSessionPopup = (session: SessionSearchItem) => {
|
|
|
116
116
|
buttons: [
|
|
117
117
|
{
|
|
118
118
|
kind: 'light',
|
|
119
|
-
label: trans('
|
|
119
|
+
label: trans('share_session_cancel'),
|
|
120
120
|
weight: 'medium',
|
|
121
121
|
onPress: () => UIUtils.popup.dismiss(),
|
|
122
122
|
},
|
|
123
123
|
{
|
|
124
124
|
kind: 'primary',
|
|
125
|
-
label: trans('
|
|
125
|
+
label: trans('share_session_confirm'),
|
|
126
126
|
weight: 'medium',
|
|
127
127
|
onPress: () => onConfirmRef.current?.(),
|
|
128
128
|
},
|