From b89b67bf687608615d99e2be2d6584e932d508a5 Mon Sep 17 00:00:00 2001 From: Ceda EI Date: Tue, 31 Mar 2020 14:36:55 +0530 Subject: [PATCH] Disallow removing used subjects Pass timetable as prop in containers. --- components/Subjects.js | 26 ++++++++++++++++++++++++-- containers/SubjectsContainer.js | 1 + 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/components/Subjects.js b/components/Subjects.js index b8574d8..e01563e 100644 --- a/components/Subjects.js +++ b/components/Subjects.js @@ -5,6 +5,7 @@ import { Card, FAB, Portal, + Snackbar, Text, withTheme } from "react-native-paper"; @@ -16,12 +17,21 @@ import { import InputDialog from "./InputDialog"; -function Subjects({ theme, subjects, addSubject, removeSubject }) { +function Subjects({ theme, subjects, timetable, addSubject, removeSubject }) { const [ showDialog, setShowDialog ] = useState(false); + const [ snackbar, setSnackbar ] = useState(false); function onInput(text) { addSubject(text); setShowDialog(false); } + function deleteSubject(id) { + if (timetable.reduce((acc, val) => acc.concat(val), []).filter(i => i.sub_id === id).length){ + setSnackbar(true); + setTimeout(() => setSnackbar(false), 2000); + return; + } + removeSubject(id); + } return ( {subjects.length === 0 ? @@ -43,7 +53,7 @@ function Subjects({ theme, subjects, addSubject, removeSubject }) { removeSubject(subject.id)} + onPress={() => deleteSubject(subject.id)} icon="delete" color={theme.colors.primary} /> @@ -63,6 +73,7 @@ function Subjects({ theme, subjects, addSubject, removeSubject }) { large icon="plus" onPress={() => setShowDialog(true)} + visible={!snackbar} style={{ position: "absolute", margin: 16, @@ -70,6 +81,16 @@ function Subjects({ theme, subjects, addSubject, removeSubject }) { bottom: 0, }} /> + setSnackbar(false)} + action={{ + label: "Dismiss", + onPress: () => setSnackbar(false), + }} + > + Subject is in use in TimeTable. + ); @@ -77,6 +98,7 @@ function Subjects({ theme, subjects, addSubject, removeSubject }) { Subjects.propTypes = { subjects: PropTypes.array, + timetable: PropTypes.array, addSubject: PropTypes.func, removeSubject: PropTypes.func, theme: PropTypes.object, diff --git a/containers/SubjectsContainer.js b/containers/SubjectsContainer.js index a57f45d..00f867e 100644 --- a/containers/SubjectsContainer.js +++ b/containers/SubjectsContainer.js @@ -5,6 +5,7 @@ import { addSubject, removeSubject } from "../actions"; const mapStateToProps = state => { return { subjects: state.subjects, + timetable: state.timetable, }; };