touchstudy-core 0.1.192 → 0.1.193

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.
@@ -0,0 +1,11 @@
1
+ import { FC } from "react";
2
+ interface Props {
3
+ open: boolean;
4
+ width: number;
5
+ height: number;
6
+ size: number;
7
+ color: string;
8
+ isEraser: boolean;
9
+ }
10
+ declare const CanvasOverlay: FC<Props>;
11
+ export default CanvasOverlay;
@@ -1,12 +1,11 @@
1
1
  import { FC } from "react";
2
- import { MessageRequest } from "../configs/types";
3
2
  export interface IInputChatProps {
4
3
  text: string;
5
4
  onSubmit: () => void;
6
5
  onChangeInput: (text: string) => void;
7
6
  isCompleted?: boolean;
8
7
  handleUploadImage: (file: File) => void;
9
- selectedFile?: MessageRequest | null;
8
+ selectedFile?: string | null;
10
9
  handleDeleteSelectedImage: () => void;
11
10
  }
12
11
  interface Props extends IInputChatProps {
@@ -0,0 +1,11 @@
1
+ import { FC } from "react";
2
+ interface Props {
3
+ open: boolean;
4
+ width: number;
5
+ height: number;
6
+ size: number;
7
+ color: string;
8
+ isEraser: boolean;
9
+ }
10
+ declare const CanvasOverlay: FC<Props>;
11
+ export default CanvasOverlay;
@@ -0,0 +1,7 @@
1
+ import { ChangeEvent, FC } from "react";
2
+ interface Props {
3
+ value: string;
4
+ onChange: (e: ChangeEvent<HTMLInputElement>) => void;
5
+ }
6
+ declare const ColorPicker: FC<Props>;
7
+ export default ColorPicker;
@@ -0,0 +1,7 @@
1
+ import { FC } from "react";
2
+ interface SketchDialogProps {
3
+ open: boolean;
4
+ handleClose: () => void;
5
+ }
6
+ declare const SketchDialog: FC<SketchDialogProps>;
7
+ export default SketchDialog;
@@ -0,0 +1,7 @@
1
+ import { FC } from "react";
2
+ interface SketchDialogProps {
3
+ open: boolean;
4
+ handleClose: () => void;
5
+ }
6
+ declare const SketchDialog: FC<SketchDialogProps>;
7
+ export default SketchDialog;
@@ -29,7 +29,7 @@ declare const useChatContainer: (props: Props) => {
29
29
  handleDeleteMessage: (conversationId: number, id: number, callback: any) => Promise<void>;
30
30
  };
31
31
  inputProps: {
32
- selectedFile: MessageRequest | null | undefined;
32
+ selectedFile: string | null;
33
33
  text: string;
34
34
  onChangeInput: (text: string) => void;
35
35
  onSubmit: () => Promise<void>;
@@ -1,7 +1,8 @@
1
1
  import { ScrollParams } from "react-virtualized";
2
2
  import { VirtualListViewProps } from "../configs/interfaces";
3
+ import _ from "lodash";
3
4
  declare const useVirtualListView: (props: VirtualListViewProps<any>) => {
4
5
  rowCount: number;
5
- onScroll: ({ scrollTop, clientHeight, scrollHeight }: ScrollParams) => void;
6
+ onScroll: _.DebouncedFunc<({ scrollTop, clientHeight, scrollHeight }: ScrollParams) => void>;
6
7
  };
7
8
  export default useVirtualListView;
package/dist/index.js CHANGED
@@ -1576,6 +1576,7 @@ var recent_class_exams = "최근 수업 시험";
1576
1576
  var there_are_no_problems_you_were_working_on = "풀던 문제가 없습니다.";
1577
1577
  var incomplete_exam = "미참가";
1578
1578
  var completed_exam = "참가";
1579
+ var failed_to_send_the_image_error = "이미지를 보내지 못했습니다: {{ message }}";
1579
1580
  var lang_ko = {
1580
1581
  problem_solving: problem_solving,
1581
1582
  my_story: my_story,
@@ -2783,7 +2784,8 @@ var lang_ko = {
2783
2784
  recent_class_exams: recent_class_exams,
2784
2785
  there_are_no_problems_you_were_working_on: there_are_no_problems_you_were_working_on,
2785
2786
  incomplete_exam: incomplete_exam,
2786
- completed_exam: completed_exam
2787
+ completed_exam: completed_exam,
2788
+ failed_to_send_the_image_error: failed_to_send_the_image_error
2787
2789
  };
2788
2790
 
2789
2791
  var problem_solving$1 = "Problem Solving";
@@ -4018,6 +4020,7 @@ var recent_class_exams$1 = "Recent Class Exams";
4018
4020
  var there_are_no_problems_you_were_working_on$1 = "There are no problems you were working on";
4019
4021
  var incomplete_exam$1 = "Incomplete";
4020
4022
  var completed_exam$1 = "Completed";
4023
+ var failed_to_send_the_image_error$1 = "Failed to send the image: {{ message }}";
4021
4024
  var lang_en = {
4022
4025
  problem_solving: problem_solving$1,
4023
4026
  my_story: my_story$1,
@@ -5227,7 +5230,8 @@ var lang_en = {
5227
5230
  recent_class_exams: recent_class_exams$1,
5228
5231
  there_are_no_problems_you_were_working_on: there_are_no_problems_you_were_working_on$1,
5229
5232
  incomplete_exam: incomplete_exam$1,
5230
- completed_exam: completed_exam$1
5233
+ completed_exam: completed_exam$1,
5234
+ failed_to_send_the_image_error: failed_to_send_the_image_error$1
5231
5235
  };
5232
5236
 
5233
5237
  i18n__default.use(reactI18next.initReactI18next).init({
@@ -7345,15 +7349,18 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
7345
7349
  var _useState2 = React.useState(0),
7346
7350
  totalPages = _useState2[0],
7347
7351
  setTotalPages = _useState2[1];
7348
- var _useState3 = React.useState(),
7349
- selectedItem = _useState3[0],
7350
- setSelectedItem = _useState3[1];
7351
- var _useState4 = React.useState(false),
7352
- isLoading = _useState4[0],
7353
- setLoading = _useState4[1];
7354
- var _useState5 = React.useState(),
7355
- filter = _useState5[0],
7356
- setFilter = _useState5[1];
7352
+ var _useState3 = React.useState(0),
7353
+ totalItems = _useState3[0],
7354
+ setTotalItems = _useState3[1];
7355
+ var _useState4 = React.useState(),
7356
+ selectedItem = _useState4[0],
7357
+ setSelectedItem = _useState4[1];
7358
+ var _useState5 = React.useState(false),
7359
+ isLoading = _useState5[0],
7360
+ setLoading = _useState5[1];
7361
+ var _useState6 = React.useState(),
7362
+ filter = _useState6[0],
7363
+ setFilter = _useState6[1];
7357
7364
  var handleChangeSelectedItem = function handleChangeSelectedItem(data) {
7358
7365
  setSelectedItem(data);
7359
7366
  };
@@ -7372,6 +7379,7 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
7372
7379
  return Promise.resolve(getItemsApi(filter)).then(function (res) {
7373
7380
  var responseData = res.data;
7374
7381
  setTotalPages((responseData === null || responseData === void 0 ? void 0 : responseData.totalPages) || 0);
7382
+ setTotalItems((responseData === null || responseData === void 0 ? void 0 : responseData.totalItems) || 0);
7375
7383
  var responseItems = (responseData === null || responseData === void 0 ? void 0 : responseData.items) || [];
7376
7384
  var results = responseItems;
7377
7385
  if (filter !== null && filter !== void 0 && filter.currentPage && filter.currentPage > 1) {
@@ -7388,16 +7396,13 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
7388
7396
  }
7389
7397
  };
7390
7398
  var handleLoadMore = React.useCallback(function () {
7391
- if (!filter || !filter.currentPage || filter.currentPage >= totalPages) {
7392
- return;
7393
- }
7399
+ if (isLoading) return;
7394
7400
  setFilter(function (state) {
7395
- var _filter$currentPage;
7396
- return !state ? state : _extends({}, state, {
7397
- currentPage: ((_filter$currentPage = filter.currentPage) != null ? _filter$currentPage : 0) + 1
7401
+ return !state || state.currentPage === undefined || state.currentPage >= totalPages ? state : _extends({}, state, {
7402
+ currentPage: state.currentPage + 1
7398
7403
  });
7399
7404
  });
7400
- }, [filter === null || filter === void 0 ? void 0 : filter.currentPage, totalPages]);
7405
+ }, [totalPages, isLoading]);
7401
7406
  var handleItemAdded = function handleItemAdded(item) {
7402
7407
  var results = [].concat(_$a.uniqBy([item].concat(items), "id"));
7403
7408
  setItems(results);
@@ -7414,7 +7419,13 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
7414
7419
  var handleChangeFilter = function handleChangeFilter(newFilter) {
7415
7420
  setFilter(newFilter);
7416
7421
  };
7422
+ var resetData = function resetData() {
7423
+ setTotalPages(0);
7424
+ setTotalItems(0);
7425
+ setItems([]);
7426
+ };
7417
7427
  React.useEffect(function () {
7428
+ resetData();
7418
7429
  setFilter(function (state) {
7419
7430
  if (JSON.stringify(state) == JSON.stringify(defaultFilter)) getItems();
7420
7431
  return defaultFilter;
@@ -7429,6 +7440,8 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
7429
7440
  selectedItem: selectedItem,
7430
7441
  items: items,
7431
7442
  isLoading: isLoading,
7443
+ totalItems: totalItems,
7444
+ resetData: resetData,
7432
7445
  handleChangeFilter: handleChangeFilter,
7433
7446
  setItems: setItems,
7434
7447
  handleChangeSelectedItem: handleChangeSelectedItem,
@@ -9630,24 +9643,27 @@ var InputChat = function InputChat(_ref) {
9630
9643
  width: "fit-content"
9631
9644
  }
9632
9645
  }, React__default.createElement("img", {
9633
- src: selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.content,
9646
+ src: selectedFile,
9634
9647
  style: {
9635
9648
  height: "100px",
9636
9649
  objectFit: "contain",
9637
9650
  objectPosition: "center"
9638
9651
  }
9639
- }), React__default.createElement("div", {
9652
+ }), React__default.createElement(material.IconButton, {
9653
+ size: "small",
9654
+ color: "error",
9640
9655
  style: {
9641
9656
  position: "absolute",
9642
9657
  right: 0,
9643
9658
  top: 0,
9644
- cursor: "pointer"
9659
+ padding: "8px",
9660
+ cursor: "pointer",
9661
+ background: grey[100]
9645
9662
  },
9646
9663
  onClick: handleDeleteSelectedImage
9647
- }, React__default.createElement(io5.IoCloseOutline, {
9648
- color: "#fff",
9649
- size: 30
9650
- }))), React__default.createElement(TinyChatEditor, {
9664
+ }, React__default.createElement(fa.FaTrash, {
9665
+ size: 16
9666
+ }))), !selectedFile && React__default.createElement(TinyChatEditor, {
9651
9667
  initValue: text,
9652
9668
  onChange: onChangeInput,
9653
9669
  disabled: isCompleted
@@ -10348,14 +10364,17 @@ var useChatContainer = function useChatContainer(props) {
10348
10364
  selectedConversation = _useState[0],
10349
10365
  setSelectedConversation = _useState[1];
10350
10366
  var _useState2 = React.useState(),
10351
- selectedFile = _useState2[0],
10352
- setSelectedFile = _useState2[1];
10353
- var _useState3 = React.useState(),
10354
- message = _useState3[0],
10355
- setMessage = _useState3[1];
10356
- var _useState4 = React.useState(true),
10357
- isScrollToEnd = _useState4[0],
10358
- setScrollToEnd = _useState4[1];
10367
+ file = _useState2[0],
10368
+ setFile = _useState2[1];
10369
+ var _useState3 = React.useState(null),
10370
+ backgroundImage = _useState3[0],
10371
+ setBackgroundImage = _useState3[1];
10372
+ var _useState4 = React.useState(),
10373
+ message = _useState4[0],
10374
+ setMessage = _useState4[1];
10375
+ var _useState5 = React.useState(true),
10376
+ isScrollToEnd = _useState5[0],
10377
+ setScrollToEnd = _useState5[1];
10359
10378
  var isAdmin = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Admin);
10360
10379
  var _useMessageList = useMessageList({
10361
10380
  student: student
@@ -10378,34 +10397,39 @@ var useChatContainer = function useChatContainer(props) {
10378
10397
  };
10379
10398
  var handleAddMessage = function handleAddMessage() {
10380
10399
  try {
10381
- var _temp6 = function _temp6() {
10400
+ var _temp3 = function _temp3(_result2) {
10401
+ if (_exit) return _result2;
10382
10402
  loadingRef.current = false;
10383
10403
  };
10404
+ var _exit = false;
10384
10405
  if (loadingRef.current) return Promise.resolve();
10385
10406
  loadingRef.current = true;
10386
10407
  if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return Promise.resolve();
10387
10408
  setScrollToEnd(true);
10388
- var _temp5 = _catch(function () {
10389
- function _temp4() {
10390
- function _temp2() {
10391
- handleChangeInput('');
10392
- setSelectedFile(null);
10393
- }
10394
- var _temp = function (_message$content) {
10409
+ var _temp2 = _catch(function () {
10410
+ if (file) {
10411
+ return Promise.resolve(handleUploadImageData(file)).then(function (selectedFile) {
10412
+ if (!selectedFile) {
10413
+ _exit = true;
10414
+ return;
10415
+ }
10416
+ return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, selectedFile, {
10417
+ contentType: 1
10418
+ }))).then(function () {
10419
+ setFile(undefined);
10420
+ setBackgroundImage(null);
10421
+ });
10422
+ });
10423
+ } else {
10424
+ var _temp4 = function (_message$content) {
10395
10425
  if (message !== null && message !== void 0 && (_message$content = message.content) !== null && _message$content !== void 0 && _message$content.trim().length) {
10396
- return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, message))).then(function () {});
10426
+ return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, message))).then(function () {
10427
+ handleChangeInput('');
10428
+ });
10397
10429
  }
10398
10430
  }();
10399
- return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
10431
+ if (_temp4 && _temp4.then) return _temp4.then(function () {});
10400
10432
  }
10401
- var _temp3 = function () {
10402
- if (selectedFile !== null && selectedFile !== void 0 && selectedFile.content) {
10403
- return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, selectedFile, {
10404
- contentType: 1
10405
- }))).then(function () {});
10406
- }
10407
- }();
10408
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
10409
10433
  }, function (error) {
10410
10434
  setMessages(function (state) {
10411
10435
  return [].concat(state.filter(function (i) {
@@ -10414,31 +10438,51 @@ var useChatContainer = function useChatContainer(props) {
10414
10438
  });
10415
10439
  reactToastify.toast.error(getErrorMessage(t, error));
10416
10440
  });
10417
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
10441
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2));
10418
10442
  } catch (e) {
10419
10443
  return Promise.reject(e);
10420
10444
  }
10421
10445
  };
10422
10446
  var handleUploadImage = function handleUploadImage(file) {
10423
- return file ? Promise.resolve(_finally(function () {
10424
- return _catch(function () {
10447
+ try {
10448
+ if (file) {
10449
+ setFile(file);
10450
+ var reader = new FileReader();
10451
+ reader.onload = function () {
10452
+ setBackgroundImage(reader.result);
10453
+ };
10454
+ reader.readAsDataURL(file);
10455
+ }
10456
+ return Promise.resolve();
10457
+ } catch (e) {
10458
+ return Promise.reject(e);
10459
+ }
10460
+ };
10461
+ var handleUploadImageData = function handleUploadImageData(file) {
10462
+ try {
10463
+ return Promise.resolve(_catch(function () {
10425
10464
  var formData = new FormData();
10426
10465
  formData.append("upload", file);
10427
10466
  return Promise.resolve(apiUploadImageFile(formData)).then(function (res) {
10428
10467
  var _res$data;
10429
- setSelectedFile({
10468
+ return {
10430
10469
  content: res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.url
10431
- });
10470
+ };
10432
10471
  });
10433
10472
  }, function (error) {
10473
+ reactToastify.toast.error(t("failed_to_send_the_image_error", {
10474
+ message: getErrorMessage(t, error)
10475
+ }));
10434
10476
  setMessages(function (state) {
10435
10477
  return [].concat(state.filter(function (i) {
10436
10478
  return (i === null || i === void 0 ? void 0 : i.id) !== 0;
10437
10479
  }));
10438
10480
  });
10439
- reactToastify.toast.error(getErrorMessage(t, error));
10440
- });
10441
- }, function () {})) : Promise.resolve();
10481
+ return null;
10482
+ }));
10483
+ } catch (e) {
10484
+ return Promise.reject(e);
10485
+ }
10442
10486
  };
10443
10487
  var handleChangeInput = function handleChangeInput(text) {
10444
10488
  setMessage({
@@ -10447,7 +10491,7 @@ var useChatContainer = function useChatContainer(props) {
10447
10491
  };
10448
10492
  var handleNewMessageSent = function handleNewMessageSent(data) {
10449
10493
  try {
10450
- var _temp7 = function _temp7(_updateLastTimeReadCo) {
10494
+ var _temp5 = function _temp5(_updateLastTimeReadCo) {
10451
10495
  _updateLastTimeReadCo;
10452
10496
  };
10453
10497
  if (!data) return Promise.resolve();
@@ -10456,14 +10500,14 @@ var useChatContainer = function useChatContainer(props) {
10456
10500
  return [].concat(state, [data]);
10457
10501
  });
10458
10502
  var _selectedConversation = selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id;
10459
- return Promise.resolve(_selectedConversation ? Promise.resolve(updateLastTimeReadConversation(selectedConversation.id)).then(_temp7) : _temp7(_selectedConversation));
10503
+ return Promise.resolve(_selectedConversation ? Promise.resolve(updateLastTimeReadConversation(selectedConversation.id)).then(_temp5) : _temp5(_selectedConversation));
10460
10504
  } catch (e) {
10461
10505
  return Promise.reject(e);
10462
10506
  }
10463
10507
  };
10464
10508
  var handleNewConversation = function handleNewConversation(data) {
10465
10509
  try {
10466
- var _temp8 = function _temp8(_updateLastTimeReadCo2) {
10510
+ var _temp6 = function _temp6(_updateLastTimeReadCo2) {
10467
10511
  _updateLastTimeReadCo2;
10468
10512
  };
10469
10513
  if (!data) return Promise.resolve();
@@ -10473,7 +10517,7 @@ var useChatContainer = function useChatContainer(props) {
10473
10517
  return [].concat(state, [item]);
10474
10518
  });
10475
10519
  var _selectedConversation2 = selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id;
10476
- return Promise.resolve(_selectedConversation2 ? Promise.resolve(updateLastTimeReadConversation(selectedConversation.id)).then(_temp8) : _temp8(_selectedConversation2));
10520
+ return Promise.resolve(_selectedConversation2 ? Promise.resolve(updateLastTimeReadConversation(selectedConversation.id)).then(_temp6) : _temp6(_selectedConversation2));
10477
10521
  } catch (e) {
10478
10522
  return Promise.reject(e);
10479
10523
  }
@@ -10492,7 +10536,8 @@ var useChatContainer = function useChatContainer(props) {
10492
10536
  }
10493
10537
  };
10494
10538
  var handleDeleteSelectedImage = function handleDeleteSelectedImage() {
10495
- setSelectedFile(null);
10539
+ setFile(undefined);
10540
+ setBackgroundImage(null);
10496
10541
  };
10497
10542
  var cleanupPusher = function cleanupPusher() {
10498
10543
  pusher === null || pusher === void 0 ? void 0 : pusher.unbind("new-message-event", handleNewMessageSent);
@@ -10578,7 +10623,7 @@ var useChatContainer = function useChatContainer(props) {
10578
10623
  handleDeleteMessage: handleDeleteMessage
10579
10624
  },
10580
10625
  inputProps: {
10581
- selectedFile: selectedFile,
10626
+ selectedFile: backgroundImage,
10582
10627
  text: (message === null || message === void 0 ? void 0 : message.content) || "",
10583
10628
  onChangeInput: handleChangeInput,
10584
10629
  onSubmit: handleAddMessage,
@@ -10661,10 +10706,11 @@ var useVirtualListView = function useVirtualListView(props) {
10661
10706
  handleLoadMore();
10662
10707
  }
10663
10708
  };
10709
+ var decounceScroll = _$a.debounce(onScroll, 300);
10664
10710
  var rowCount = data.length + (loading ? 1 : 0);
10665
10711
  return {
10666
10712
  rowCount: rowCount,
10667
- onScroll: onScroll
10713
+ onScroll: decounceScroll
10668
10714
  };
10669
10715
  };
10670
10716
 
@@ -16070,7 +16116,7 @@ var useStudentInfoDrawer = function useStudentInfoDrawer(props) {
16070
16116
  var _temp2 = function _temp2() {
16071
16117
  setLoading(false);
16072
16118
  };
16073
- if (!studentId) return Promise.resolve();
16119
+ if (!studentId || !open) return Promise.resolve();
16074
16120
  setLoading(true);
16075
16121
  var _temp = _catch(function () {
16076
16122
  return Promise.resolve(getUserByIdApi(studentId)).then(function (res) {
@@ -16083,7 +16129,7 @@ var useStudentInfoDrawer = function useStudentInfoDrawer(props) {
16083
16129
  }
16084
16130
  };
16085
16131
  getStudent();
16086
- }, [studentId]);
16132
+ }, [open, studentId]);
16087
16133
  React.useEffect(function () {
16088
16134
  if (open && inert) {
16089
16135
  var _document$getElementB;