React app
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

AddWord.tsx 5.1 KiB

4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
4 yıl önce
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import React, { useState } from "react";
  2. import styles from './AddWord.module.scss';
  3. import { ReactComponent as ChevronLeft } from '../../assets/icons/chevron-left.svg';
  4. import { ReactComponent as SearchIcon } from '../../assets/icons/bx-search-alt.svg';
  5. import { ReactComponent as SpeakerIcon } from '../../assets/icons/speaker.svg';
  6. import { ReactComponent as AddIcon } from '../../assets/icons/plus.svg';
  7. import { NavLink, useHistory } from "react-router-dom";
  8. import { userProfileData } from "../../App";
  9. import { getWordResult } from "../../services/words";
  10. import { Word } from "../../shared/models/word";
  11. export const AddWord: React.FC = () => {
  12. const [searchResult, setSearchResult] = useState<Array<Word>>();
  13. const [selectedWord, setSelectedWord] = useState<Word>();
  14. const [searchWord, setSearchWord] = useState<string>('');
  15. const history = useHistory();
  16. const searchWords = () => {
  17. if (searchWord.length > 0) {
  18. getWordResult(searchWord).then((wordResult: any) => {
  19. let result: Array<Word> = wordResult.data;
  20. setSearchResult(result);
  21. }, err => {
  22. console.log("Unable to search Words", err)
  23. });
  24. }
  25. }
  26. return <section className="modalPage">
  27. <header className={styles.navHeader}>
  28. <button onClick={() => {
  29. if (selectedWord) {
  30. setSelectedWord(undefined);
  31. } else {
  32. window.history.back()
  33. }
  34. }}>
  35. <ChevronLeft />
  36. </button>
  37. {!selectedWord && <h5> Add a Word </h5>}
  38. {selectedWord && <h5> Add to Shelf </h5>}
  39. <figure style={{ opacity: selectedWord ? 0 : 1 }}>
  40. {/* eslint-disable-next-line */}
  41. <img src={userProfileData.image} alt="profile-image" />
  42. </figure>
  43. </header>
  44. {!selectedWord && <section>
  45. <div className={styles.searchBarHolder}>
  46. <div className={styles.searchBar}>
  47. <input type="text" autoFocus={true} placeholder={'Search and add a word'} onChange={(event) => setSearchWord(event.currentTarget.value)} />
  48. <button onClick={() => searchWords()}>
  49. <SearchIcon />
  50. </button>
  51. </div>
  52. </div>
  53. { searchResult && <ul className={styles.searchResult}>
  54. {searchResult.map((word) => {
  55. return <li key={word.name}>
  56. <header>
  57. <h4> {word.name} <span> {word.pronounciation} </span> </h4>
  58. <button>
  59. <SpeakerIcon />
  60. </button>
  61. </header>
  62. <div className={styles.description}>
  63. <span> {word.grammaticalDetails[0]?.type} </span>
  64. <p> {word.grammaticalDetails[0]?.description} </p>
  65. </div>
  66. <button className={styles.addButton} onClick={() => setSelectedWord(word)}> <AddIcon /> Add </button>
  67. </li>
  68. })}
  69. </ul> }
  70. </section>}
  71. {selectedWord && <section>
  72. <div className={styles.searchBarHolder}>
  73. <div className={styles.searchBar}>
  74. <input type="text" placeholder={'Search shelves'} />
  75. <SearchIcon />
  76. </div>
  77. </div>
  78. <ul className={styles.shelfList}>
  79. <header>
  80. <h5> All Shelves </h5>
  81. </header>
  82. {userProfileData.categories.map((category, categoryIndex) => {
  83. return category.shelves.map((shelf, shelfIndex) => {
  84. return <li key={shelf.name} onClick={() => {
  85. let findWord = userProfileData.categories[categoryIndex].shelves[shelfIndex].words.find(word => word.name.toLowerCase().includes(selectedWord.name.toLowerCase()));
  86. if (findWord) {
  87. alert("Word already Present!");
  88. } else {
  89. // userProfileData.categories[categoryIndex].shelves[shelfIndex].words.push(selectedWord);
  90. history.push('/shelf-details/category_id=' + categoryIndex + '&&shelf_id=' + shelfIndex);
  91. }
  92. }}>
  93. <div className={styles.icon}>
  94. {category.icon}
  95. </div>
  96. <div className={styles.info}>
  97. <label> {shelf.name} </label>
  98. <span> {category.name} </span>
  99. </div>
  100. </li>
  101. })
  102. })}
  103. <NavLink to={'/add-shelf'} className={styles.AddShelfButton}> <span> <AddIcon /> </span> Create New Shelf </NavLink>
  104. </ul>
  105. </section>}
  106. </section>
  107. }