useClassStandardDataOutput.ts (11779B)
1 import prettierPluginBabel from 'prettier/plugins/babel'; 2 import prettierPluginEstree from 'prettier/plugins/estree'; 3 import { format } from 'prettier/standalone'; 4 import { useState } from 'react'; 5 6 import { DAY_PERIOD_JA, GRADE_CLASSES } from 'common/constant'; 7 8 import type { InputSchema } from '../schema'; 9 import type { ClassStandardTimetable, GradeClass } from 'common/types'; 10 11 type Result = { 12 output: string; 13 transformIntoObject: (data: InputSchema) => void; 14 }; 15 16 const useDayPeriodDataOutput = (): Result => { 17 const [value, setValue] = useState<string>(''); 18 19 const transformIntoObject = (data: InputSchema) => { 20 const output = structuredClone(initialData); 21 22 // 横方向曜日時限、縦方向クラスの2次元配列に転置する 23 const transposedData = data[0]?.map((_, i) => data.map((row) => row[i])); 24 25 // 各クラスについて実行 26 transposedData?.map((row, i) => { 27 const gradeClass = GRADE_CLASSES[i]; 28 29 // 各曜日時限について実行 30 row.map((subjects, j) => { 31 const dayPeriod = DAY_PERIOD_JA[j]; 32 if (gradeClass && dayPeriod && subjects) { 33 output[gradeClass][dayPeriod] = subjects 34 .split('/') 35 .map((subject) => ({ 36 shortName: subject, 37 })); 38 } 39 }); 40 }); 41 42 format(JSON.stringify(output), { 43 useTabs: true, 44 parser: 'json', 45 plugins: [prettierPluginBabel, prettierPluginEstree], 46 }) 47 .then((v) => { 48 setValue(v); 49 }) 50 .catch((err) => { 51 console.log(err); 52 }); 53 }; 54 55 return { 56 output: value, 57 transformIntoObject, 58 }; 59 }; 60 61 export default useDayPeriodDataOutput; 62 63 const initialData: Record<GradeClass, ClassStandardTimetable> = { 64 '1-1': { 65 月1: [], 66 月2: [], 67 月3: [], 68 月4: [], 69 月5: [], 70 月6: [], 71 月7: [], 72 火1: [], 73 火2: [], 74 火3: [], 75 火4: [], 76 火5: [], 77 火6: [], 78 火7: [], 79 水1: [], 80 水2: [], 81 水3: [], 82 水4: [], 83 水5: [], 84 水6: [], 85 水7: [], 86 木1: [], 87 木2: [], 88 木3: [], 89 木4: [], 90 木5: [], 91 木6: [], 92 金1: [], 93 金2: [], 94 金3: [], 95 金4: [], 96 金5: [], 97 金6: [], 98 金7: [], 99 }, 100 '1-2': { 101 月1: [], 102 月2: [], 103 月3: [], 104 月4: [], 105 月5: [], 106 月6: [], 107 月7: [], 108 火1: [], 109 火2: [], 110 火3: [], 111 火4: [], 112 火5: [], 113 火6: [], 114 火7: [], 115 水1: [], 116 水2: [], 117 水3: [], 118 水4: [], 119 水5: [], 120 水6: [], 121 水7: [], 122 木1: [], 123 木2: [], 124 木3: [], 125 木4: [], 126 木5: [], 127 木6: [], 128 金1: [], 129 金2: [], 130 金3: [], 131 金4: [], 132 金5: [], 133 金6: [], 134 金7: [], 135 }, 136 '1-3': { 137 月1: [], 138 月2: [], 139 月3: [], 140 月4: [], 141 月5: [], 142 月6: [], 143 月7: [], 144 火1: [], 145 火2: [], 146 火3: [], 147 火4: [], 148 火5: [], 149 火6: [], 150 火7: [], 151 水1: [], 152 水2: [], 153 水3: [], 154 水4: [], 155 水5: [], 156 水6: [], 157 水7: [], 158 木1: [], 159 木2: [], 160 木3: [], 161 木4: [], 162 木5: [], 163 木6: [], 164 金1: [], 165 金2: [], 166 金3: [], 167 金4: [], 168 金5: [], 169 金6: [], 170 金7: [], 171 }, 172 '1-4': { 173 月1: [], 174 月2: [], 175 月3: [], 176 月4: [], 177 月5: [], 178 月6: [], 179 月7: [], 180 火1: [], 181 火2: [], 182 火3: [], 183 火4: [], 184 火5: [], 185 火6: [], 186 火7: [], 187 水1: [], 188 水2: [], 189 水3: [], 190 水4: [], 191 水5: [], 192 水6: [], 193 水7: [], 194 木1: [], 195 木2: [], 196 木3: [], 197 木4: [], 198 木5: [], 199 木6: [], 200 金1: [], 201 金2: [], 202 金3: [], 203 金4: [], 204 金5: [], 205 金6: [], 206 金7: [], 207 }, 208 '1-5': { 209 月1: [], 210 月2: [], 211 月3: [], 212 月4: [], 213 月5: [], 214 月6: [], 215 月7: [], 216 火1: [], 217 火2: [], 218 火3: [], 219 火4: [], 220 火5: [], 221 火6: [], 222 火7: [], 223 水1: [], 224 水2: [], 225 水3: [], 226 水4: [], 227 水5: [], 228 水6: [], 229 水7: [], 230 木1: [], 231 木2: [], 232 木3: [], 233 木4: [], 234 木5: [], 235 木6: [], 236 金1: [], 237 金2: [], 238 金3: [], 239 金4: [], 240 金5: [], 241 金6: [], 242 金7: [], 243 }, 244 '1-6': { 245 月1: [], 246 月2: [], 247 月3: [], 248 月4: [], 249 月5: [], 250 月6: [], 251 月7: [], 252 火1: [], 253 火2: [], 254 火3: [], 255 火4: [], 256 火5: [], 257 火6: [], 258 火7: [], 259 水1: [], 260 水2: [], 261 水3: [], 262 水4: [], 263 水5: [], 264 水6: [], 265 水7: [], 266 木1: [], 267 木2: [], 268 木3: [], 269 木4: [], 270 木5: [], 271 木6: [], 272 金1: [], 273 金2: [], 274 金3: [], 275 金4: [], 276 金5: [], 277 金6: [], 278 金7: [], 279 }, 280 '1-7': { 281 月1: [], 282 月2: [], 283 月3: [], 284 月4: [], 285 月5: [], 286 月6: [], 287 月7: [], 288 火1: [], 289 火2: [], 290 火3: [], 291 火4: [], 292 火5: [], 293 火6: [], 294 火7: [], 295 水1: [], 296 水2: [], 297 水3: [], 298 水4: [], 299 水5: [], 300 水6: [], 301 水7: [], 302 木1: [], 303 木2: [], 304 木3: [], 305 木4: [], 306 木5: [], 307 木6: [], 308 金1: [], 309 金2: [], 310 金3: [], 311 金4: [], 312 金5: [], 313 金6: [], 314 金7: [], 315 }, 316 '1-8': { 317 月1: [], 318 月2: [], 319 月3: [], 320 月4: [], 321 月5: [], 322 月6: [], 323 月7: [], 324 火1: [], 325 火2: [], 326 火3: [], 327 火4: [], 328 火5: [], 329 火6: [], 330 火7: [], 331 水1: [], 332 水2: [], 333 水3: [], 334 水4: [], 335 水5: [], 336 水6: [], 337 水7: [], 338 木1: [], 339 木2: [], 340 木3: [], 341 木4: [], 342 木5: [], 343 木6: [], 344 金1: [], 345 金2: [], 346 金3: [], 347 金4: [], 348 金5: [], 349 金6: [], 350 金7: [], 351 }, 352 '2-1': { 353 月1: [], 354 月2: [], 355 月3: [], 356 月4: [], 357 月5: [], 358 月6: [], 359 月7: [], 360 火1: [], 361 火2: [], 362 火3: [], 363 火4: [], 364 火5: [], 365 火6: [], 366 火7: [], 367 水1: [], 368 水2: [], 369 水3: [], 370 水4: [], 371 水5: [], 372 水6: [], 373 水7: [], 374 木1: [], 375 木2: [], 376 木3: [], 377 木4: [], 378 木5: [], 379 木6: [], 380 金1: [], 381 金2: [], 382 金3: [], 383 金4: [], 384 金5: [], 385 金6: [], 386 金7: [], 387 }, 388 '2-2': { 389 月1: [], 390 月2: [], 391 月3: [], 392 月4: [], 393 月5: [], 394 月6: [], 395 月7: [], 396 火1: [], 397 火2: [], 398 火3: [], 399 火4: [], 400 火5: [], 401 火6: [], 402 火7: [], 403 水1: [], 404 水2: [], 405 水3: [], 406 水4: [], 407 水5: [], 408 水6: [], 409 水7: [], 410 木1: [], 411 木2: [], 412 木3: [], 413 木4: [], 414 木5: [], 415 木6: [], 416 金1: [], 417 金2: [], 418 金3: [], 419 金4: [], 420 金5: [], 421 金6: [], 422 金7: [], 423 }, 424 '2-3': { 425 月1: [], 426 月2: [], 427 月3: [], 428 月4: [], 429 月5: [], 430 月6: [], 431 月7: [], 432 火1: [], 433 火2: [], 434 火3: [], 435 火4: [], 436 火5: [], 437 火6: [], 438 火7: [], 439 水1: [], 440 水2: [], 441 水3: [], 442 水4: [], 443 水5: [], 444 水6: [], 445 水7: [], 446 木1: [], 447 木2: [], 448 木3: [], 449 木4: [], 450 木5: [], 451 木6: [], 452 金1: [], 453 金2: [], 454 金3: [], 455 金4: [], 456 金5: [], 457 金6: [], 458 金7: [], 459 }, 460 '2-4': { 461 月1: [], 462 月2: [], 463 月3: [], 464 月4: [], 465 月5: [], 466 月6: [], 467 月7: [], 468 火1: [], 469 火2: [], 470 火3: [], 471 火4: [], 472 火5: [], 473 火6: [], 474 火7: [], 475 水1: [], 476 水2: [], 477 水3: [], 478 水4: [], 479 水5: [], 480 水6: [], 481 水7: [], 482 木1: [], 483 木2: [], 484 木3: [], 485 木4: [], 486 木5: [], 487 木6: [], 488 金1: [], 489 金2: [], 490 金3: [], 491 金4: [], 492 金5: [], 493 金6: [], 494 金7: [], 495 }, 496 '2-5': { 497 月1: [], 498 月2: [], 499 月3: [], 500 月4: [], 501 月5: [], 502 月6: [], 503 月7: [], 504 火1: [], 505 火2: [], 506 火3: [], 507 火4: [], 508 火5: [], 509 火6: [], 510 火7: [], 511 水1: [], 512 水2: [], 513 水3: [], 514 水4: [], 515 水5: [], 516 水6: [], 517 水7: [], 518 木1: [], 519 木2: [], 520 木3: [], 521 木4: [], 522 木5: [], 523 木6: [], 524 金1: [], 525 金2: [], 526 金3: [], 527 金4: [], 528 金5: [], 529 金6: [], 530 金7: [], 531 }, 532 '2-6': { 533 月1: [], 534 月2: [], 535 月3: [], 536 月4: [], 537 月5: [], 538 月6: [], 539 月7: [], 540 火1: [], 541 火2: [], 542 火3: [], 543 火4: [], 544 火5: [], 545 火6: [], 546 火7: [], 547 水1: [], 548 水2: [], 549 水3: [], 550 水4: [], 551 水5: [], 552 水6: [], 553 水7: [], 554 木1: [], 555 木2: [], 556 木3: [], 557 木4: [], 558 木5: [], 559 木6: [], 560 金1: [], 561 金2: [], 562 金3: [], 563 金4: [], 564 金5: [], 565 金6: [], 566 金7: [], 567 }, 568 '2-7': { 569 月1: [], 570 月2: [], 571 月3: [], 572 月4: [], 573 月5: [], 574 月6: [], 575 月7: [], 576 火1: [], 577 火2: [], 578 火3: [], 579 火4: [], 580 火5: [], 581 火6: [], 582 火7: [], 583 水1: [], 584 水2: [], 585 水3: [], 586 水4: [], 587 水5: [], 588 水6: [], 589 水7: [], 590 木1: [], 591 木2: [], 592 木3: [], 593 木4: [], 594 木5: [], 595 木6: [], 596 金1: [], 597 金2: [], 598 金3: [], 599 金4: [], 600 金5: [], 601 金6: [], 602 金7: [], 603 }, 604 '2-8': { 605 月1: [], 606 月2: [], 607 月3: [], 608 月4: [], 609 月5: [], 610 月6: [], 611 月7: [], 612 火1: [], 613 火2: [], 614 火3: [], 615 火4: [], 616 火5: [], 617 火6: [], 618 火7: [], 619 水1: [], 620 水2: [], 621 水3: [], 622 水4: [], 623 水5: [], 624 水6: [], 625 水7: [], 626 木1: [], 627 木2: [], 628 木3: [], 629 木4: [], 630 木5: [], 631 木6: [], 632 金1: [], 633 金2: [], 634 金3: [], 635 金4: [], 636 金5: [], 637 金6: [], 638 金7: [], 639 }, 640 '3-1': { 641 月1: [], 642 月2: [], 643 月3: [], 644 月4: [], 645 月5: [], 646 月6: [], 647 月7: [], 648 火1: [], 649 火2: [], 650 火3: [], 651 火4: [], 652 火5: [], 653 火6: [], 654 火7: [], 655 水1: [], 656 水2: [], 657 水3: [], 658 水4: [], 659 水5: [], 660 水6: [], 661 水7: [], 662 木1: [], 663 木2: [], 664 木3: [], 665 木4: [], 666 木5: [], 667 木6: [], 668 金1: [], 669 金2: [], 670 金3: [], 671 金4: [], 672 金5: [], 673 金6: [], 674 金7: [], 675 }, 676 '3-2': { 677 月1: [], 678 月2: [], 679 月3: [], 680 月4: [], 681 月5: [], 682 月6: [], 683 月7: [], 684 火1: [], 685 火2: [], 686 火3: [], 687 火4: [], 688 火5: [], 689 火6: [], 690 火7: [], 691 水1: [], 692 水2: [], 693 水3: [], 694 水4: [], 695 水5: [], 696 水6: [], 697 水7: [], 698 木1: [], 699 木2: [], 700 木3: [], 701 木4: [], 702 木5: [], 703 木6: [], 704 金1: [], 705 金2: [], 706 金3: [], 707 金4: [], 708 金5: [], 709 金6: [], 710 金7: [], 711 }, 712 '3-3': { 713 月1: [], 714 月2: [], 715 月3: [], 716 月4: [], 717 月5: [], 718 月6: [], 719 月7: [], 720 火1: [], 721 火2: [], 722 火3: [], 723 火4: [], 724 火5: [], 725 火6: [], 726 火7: [], 727 水1: [], 728 水2: [], 729 水3: [], 730 水4: [], 731 水5: [], 732 水6: [], 733 水7: [], 734 木1: [], 735 木2: [], 736 木3: [], 737 木4: [], 738 木5: [], 739 木6: [], 740 金1: [], 741 金2: [], 742 金3: [], 743 金4: [], 744 金5: [], 745 金6: [], 746 金7: [], 747 }, 748 '3-4': { 749 月1: [], 750 月2: [], 751 月3: [], 752 月4: [], 753 月5: [], 754 月6: [], 755 月7: [], 756 火1: [], 757 火2: [], 758 火3: [], 759 火4: [], 760 火5: [], 761 火6: [], 762 火7: [], 763 水1: [], 764 水2: [], 765 水3: [], 766 水4: [], 767 水5: [], 768 水6: [], 769 水7: [], 770 木1: [], 771 木2: [], 772 木3: [], 773 木4: [], 774 木5: [], 775 木6: [], 776 金1: [], 777 金2: [], 778 金3: [], 779 金4: [], 780 金5: [], 781 金6: [], 782 金7: [], 783 }, 784 '3-5': { 785 月1: [], 786 月2: [], 787 月3: [], 788 月4: [], 789 月5: [], 790 月6: [], 791 月7: [], 792 火1: [], 793 火2: [], 794 火3: [], 795 火4: [], 796 火5: [], 797 火6: [], 798 火7: [], 799 水1: [], 800 水2: [], 801 水3: [], 802 水4: [], 803 水5: [], 804 水6: [], 805 水7: [], 806 木1: [], 807 木2: [], 808 木3: [], 809 木4: [], 810 木5: [], 811 木6: [], 812 金1: [], 813 金2: [], 814 金3: [], 815 金4: [], 816 金5: [], 817 金6: [], 818 金7: [], 819 }, 820 '3-6': { 821 月1: [], 822 月2: [], 823 月3: [], 824 月4: [], 825 月5: [], 826 月6: [], 827 月7: [], 828 火1: [], 829 火2: [], 830 火3: [], 831 火4: [], 832 火5: [], 833 火6: [], 834 火7: [], 835 水1: [], 836 水2: [], 837 水3: [], 838 水4: [], 839 水5: [], 840 水6: [], 841 水7: [], 842 木1: [], 843 木2: [], 844 木3: [], 845 木4: [], 846 木5: [], 847 木6: [], 848 金1: [], 849 金2: [], 850 金3: [], 851 金4: [], 852 金5: [], 853 金6: [], 854 金7: [], 855 }, 856 '3-7': { 857 月1: [], 858 月2: [], 859 月3: [], 860 月4: [], 861 月5: [], 862 月6: [], 863 月7: [], 864 火1: [], 865 火2: [], 866 火3: [], 867 火4: [], 868 火5: [], 869 火6: [], 870 火7: [], 871 水1: [], 872 水2: [], 873 水3: [], 874 水4: [], 875 水5: [], 876 水6: [], 877 水7: [], 878 木1: [], 879 木2: [], 880 木3: [], 881 木4: [], 882 木5: [], 883 木6: [], 884 金1: [], 885 金2: [], 886 金3: [], 887 金4: [], 888 金5: [], 889 金6: [], 890 金7: [], 891 }, 892 '3-8': { 893 月1: [], 894 月2: [], 895 月3: [], 896 月4: [], 897 月5: [], 898 月6: [], 899 月7: [], 900 火1: [], 901 火2: [], 902 火3: [], 903 火4: [], 904 火5: [], 905 火6: [], 906 火7: [], 907 水1: [], 908 水2: [], 909 水3: [], 910 水4: [], 911 水5: [], 912 水6: [], 913 水7: [], 914 木1: [], 915 木2: [], 916 木3: [], 917 木4: [], 918 木5: [], 919 木6: [], 920 金1: [], 921 金2: [], 922 金3: [], 923 金4: [], 924 金5: [], 925 金6: [], 926 金7: [], 927 }, 928 } as const;