import React, { useState, useEffect } from 'react'; import axios from "axios"; import { Table, Collapsible, CollapsibleItem, Button, TextInput, Row, Col, Select } from "react-materialize"; import M from "materialize-css"; import YesNoModal from "../common/YesNoModal"; const ListChips = (props) => { const [chipsList, setChipsList] = useState([]); const [chipValuePairs, setChipValuePairs] = useState([]); const [chipValueActiveIndex, setChipValueActiveIndex] = useState(undefined); const [editingChipValue, setEditingChipValue] = useState(""); const [newChipValueSecondaryChipId, setNewChipValueSecondaryChipId] = useState(""); const reloadChipsListEffect = () => { (async() => { try { const chipsResponse = await axios.get(`/api/chips`); if (chipsResponse && chipsResponse.status === 200 && Array.isArray(chipsResponse.data)) { setChipsList(chipsResponse.data); } } catch (e) { errorToast(); } })(); } const updateChipValuePairsEffect = () => { const result = []; chipsList.forEach(chip => { const chipValues = chip['base_chip_values']; chipValues.forEach(chipValue => { result.push({ baseChipId: chip.id, secondaryChipId: chipValue['secondary_chip_id'] }); }); }); setChipValuePairs(result); } useEffect(reloadChipsListEffect, []); useEffect(updateChipValuePairsEffect, [chipsList]); const deleteChip = async (chipId) => { try { const chipsResponse = await axios.delete(`/api/chips/${chipId}`); if (chipsResponse && chipsResponse.status === 200 && Array.isArray(chipsResponse.data)){ setChipsList(chipsResponse.data); M.toast({ html: 'Chip destroyed!' }); } } catch (e) { errorToast(); } } const addNewChipValue = async (baseChipId) => { try{ const newChipValueObject = { 'chip_value': { base_chip_id: baseChipId, secondary_chip_id: newChipValueSecondaryChipId, value: editingChipValue } } const chipsResponse = await axios.post(`/api/chip_values`, newChipValueObject); if (chipsResponse && chipsResponse.status === 200){ setChipsList(chipsResponse.data); setNewChipValueSecondaryChipId(""); setChipValueActiveIndex(undefined); setEditingChipValue(""); M.toast({ html: 'I smell money $$$' }); } } catch (e) { errorToast(); } } const updateChipValue = async (chipValueId) => { try{ const updatedChipValue = { 'chip_value': { id: chipValueId, value: editingChipValue } } const chipsResponse = await axios.put(`/api/chip_values/${chipValueId}`, updatedChipValue); if (chipsResponse && chipsResponse.status === 200){ setChipsList(chipsResponse.data); setChipValueActiveIndex(undefined); setEditingChipValue(""); } } catch (e) { errorToast(); } } const deleteChipValue = async (chipValueId) => { try { const chipsResponse = await axios.delete(`/api/chip_values/${chipValueId}`); if (chipsResponse && chipsResponse.status === 200){ setChipsList(chipsResponse.data); M.toast({ html: 'Destroyed!' }); } } catch (e) { errorToast(); } } const errorToast = () => M.toast({ html: "Yo! It ain't workin'" }); const getChipData = (chipId) => chipsList.find(chip => chip.id === chipId); const checkIfPairExists = (baseChipId, secondaryChipId) => { return chipValuePairs.find(chipValuePair => chipValuePair.baseChipId === baseChipId && chipValuePair.secondaryChipId === secondaryChipId); } const secondaryChipOptions = (baseChipId) => { const options = chipsList.map((chip, index) => { if (chip.id !== baseChipId && !checkIfPairExists(baseChipId, chip.id)) { return }else { return null; } }); return options.filter(option => option !== null); }; const chipActions = (id) => (