From 472119427d7b79de12f603fdb015ac8d3ca10af0 Mon Sep 17 00:00:00 2001 From: Matt McCoy <59743922+MattCMcCoy@users.noreply.github.com> Date: Fri, 19 Apr 2024 13:49:58 -0400 Subject: [PATCH] Feature/data (#90) * feat: some data * fix: task details page * feat: all around fixes that i noticed * refactor: colors and missing task id???? * refactor: revert migrations folder changes * fix: db changes bc i forgot stuff changed in past few merges * fix: category pills from not rendering correctly * fix: more general fixes everywhere * fix: transparencies on home page * feat: caitlins profile pic --- backend/db/migrations/4.label.sql | 2 +- backend/db/simulation/1.user.sql | 30 ++++ backend/db/simulation/2.group.sql | 48 ++++++ backend/db/simulation/3.task.sql | 154 ++++++++++++++++++ backend/db/simulation/4.label.sql | 54 ++++++ backend/db/simulation/5.files.sql | 17 ++ client/components/Dropdown.tsx | 2 +- client/components/GetCategoryPill.tsx | 102 ++++++++++++ client/components/calendar/QuickTask.tsx | 2 +- client/components/calendar/TaskInfoCard.tsx | 70 ++------ client/components/calendar/TimelineList.tsx | 3 +- .../components/file_management/FileTile.tsx | 16 +- client/components/home/TaskList.tsx | 2 +- client/navigation/AppNavigation.tsx | 3 +- .../navigation/AppStackBottomTabNavigator.tsx | 1 + .../CalendarNavigationContainer.tsx | 3 +- .../containers/HomeNavigationContainer.tsx | 3 +- .../containers/ProfileNavigationContainer.tsx | 3 +- .../SingleTaskNavigationContainer.tsx | 16 -- client/screens/Calendar.tsx | 77 ++++----- client/screens/FileUpload.tsx | 4 +- client/screens/Home.tsx | 28 ++-- client/screens/SingleTask.tsx | 61 +------ .../screens/TaskCreation/AddTaskDetails.tsx | 9 +- client/screens/TaskList.tsx | 17 +- client/services/task.ts | 18 +- client/tailwind.config.js | 1 + client/types/task.ts | 1 + client/types/type.tsx | 12 +- docker-compose.yaml | 2 +- 30 files changed, 549 insertions(+), 212 deletions(-) create mode 100644 backend/db/simulation/1.user.sql create mode 100644 backend/db/simulation/2.group.sql create mode 100644 backend/db/simulation/3.task.sql create mode 100644 backend/db/simulation/4.label.sql create mode 100644 backend/db/simulation/5.files.sql create mode 100644 client/components/GetCategoryPill.tsx delete mode 100644 client/navigation/containers/SingleTaskNavigationContainer.tsx diff --git a/backend/db/migrations/4.label.sql b/backend/db/migrations/4.label.sql index 12021eaa..b38be9b9 100644 --- a/backend/db/migrations/4.label.sql +++ b/backend/db/migrations/4.label.sql @@ -26,7 +26,7 @@ VALUES (1, 'Household', 'purple'), (5, 'Financial', 'orange'), (5, 'Appointments', 'green'), - (5, 'Old People <3', 'red') + (5, 'Medication', 'red') ; INSERT INTO task_labels (task_id, group_id, label_name) diff --git a/backend/db/simulation/1.user.sql b/backend/db/simulation/1.user.sql new file mode 100644 index 00000000..1f86251d --- /dev/null +++ b/backend/db/simulation/1.user.sql @@ -0,0 +1,30 @@ +DROP TABLE IF EXISTS users; + +CREATE TABLE IF NOT EXISTS users ( + user_id varchar NOT NULL UNIQUE, + first_name varchar NOT NULL, + last_name varchar NOT NULL, + email varchar NOT NULL, + phone varchar, --potentially make phone/address required (NOT NULL) + address varchar, + profile_picture varchar, + device_id varchar, --expoPushToken for push notifications + push_notification_enabled BOOLEAN DEFAULT FALSE, + PRIMARY KEY (user_id) +); + +INSERT INTO users (user_id, first_name, last_name, email, phone, address, profile_picture) +VALUES + -- Care-Wallet Team + ('fIoFY26mJnYWH8sNdfuVoxpnVnr1', 'Matt', 'McCoy', 'mattcmccoy01@gmail.com', '', '', 'fIoFY26mJnYWH8sNdfuVoxpnVnr1-IMG_1384.jpeg'), + ('JamnX6TZf0dt6juozMRzNG5LMQd2', 'Andy', 'Cap', 'caplan.and@northeastern.edu', '', '', 'JamnX6TZf0dt6juozMRzNG5LMQd2-IMG_0916.HEIC'), + ('BLq3MXk4rVg4RKuYiMd7aEmMhsz1', 'Ansh', 'Patel', 'anshrpatel22@gmail.com', '', '', 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1-IMG_0585.jpg'), + ('mPeo3d3MiXfnpPJADWgFD9ZcB2M2', 'Olivia', 'Sedarski', 'olivia@gmail.com', '', '', 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2-IMG_5068.jpeg'), + ('pTBhZsE9BaOxltkGUfoBAUDote43', 'Louis', 'Rollo', 'rollo.l@northeastern.edu', '', '', 'pTBhZsE9BaOxltkGUfoBAUDote43-IMG_3341.jpg'), + ('8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', 'Narayan', 'Sharma', 'sharma.na@northeastern.edu', '', '', '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1-IMG_1777.JPG'), + ('iL7PnjS4axQffmlPceobjUUZ9DF2', 'Caitlin', 'Flynn', 'flynn.ca@northeastern.edu', '', '', 'iL7PnjS4axQffmlPceobjUUZ9DF2-IMG_2428.jpg'), + ('5JgN2PQxCRM9VoCiiFPlQPNqkL32', 'Linwood', 'Blaisdell', 'blaisdell.l@northeastern.edu', '', '', '5JgN2PQxCRM9VoCiiFPlQPNqkL32-IMG_6884.jpg'), + ('P03ggWcw63N0RSY7ltbkeBoR6bd2', 'Chris', 'Wyatt', 'wyatt.c@northeastern.edu', '', '', 'P03ggWcw63N0RSY7ltbkeBoR6bd2-IMG_1597.jpeg'), + ('9rIMSUo6qNf8ToTABkCfNqnByRv1', 'Haley', 'Martin', 'martin.hal@northeastern.edu', '', '', '9rIMSUo6qNf8ToTABkCfNqnByRv1-IMG_8603.jpg') + -- End Care-Wallet Team +; diff --git a/backend/db/simulation/2.group.sql b/backend/db/simulation/2.group.sql new file mode 100644 index 00000000..8d54cce2 --- /dev/null +++ b/backend/db/simulation/2.group.sql @@ -0,0 +1,48 @@ +DROP TABLE IF EXISTS care_group; +DROP TABLE IF EXISTS group_roles; + +CREATE TYPE role AS ENUM ('PATIENT', 'PRIMARY', 'SECONDARY'); + +CREATE TABLE IF NOT EXISTS care_group ( + group_id serial NOT NULL UNIQUE, + group_name varchar NOT NULL, + date_created timestamp NOT NULL, --do we default current time? + PRIMARY KEY (group_id) +); + +CREATE TABLE IF NOT EXISTS group_roles ( + group_id integer NOT NULL, + user_id varchar NOT NULL, + role role NOT NULL, + PRIMARY KEY (group_id, user_id), + FOREIGN KEY (group_id) REFERENCES care_group (group_id), + FOREIGN KEY (user_id) REFERENCES users (user_id) +); + +INSERT INTO care_group (group_name, date_created) +VALUES + ('Smith Family', NOW()), + ('Johnson Support Network', NOW()), + ('Williams Care Team', NOW()), + ('Brown Medical Group', NOW()), + + -- Care-Wallet Team + ('We <3 Old People', NOW()) + -- End Care-Wallet Team +; + +INSERT INTO group_roles (group_id, user_id, role) +VALUES + -- Care-Wallet Team + (5, 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', 'PRIMARY'), + (5, 'JamnX6TZf0dt6juozMRzNG5LMQd2', 'PRIMARY'), + (5, '5JgN2PQxCRM9VoCiiFPlQPNqkL32', 'PATIENT'), + (5, 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', 'SECONDARY'), + (5, 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', 'SECONDARY'), + (5, 'pTBhZsE9BaOxltkGUfoBAUDote43', 'SECONDARY'), + (5, '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', 'SECONDARY'), + (5, 'iL7PnjS4axQffmlPceobjUUZ9DF2', 'SECONDARY'), + (5, 'P03ggWcw63N0RSY7ltbkeBoR6bd2', 'SECONDARY'), + (5, '9rIMSUo6qNf8ToTABkCfNqnByRv1', 'SECONDARY') + -- End Care-Wallet Team +; diff --git a/backend/db/simulation/3.task.sql b/backend/db/simulation/3.task.sql new file mode 100644 index 00000000..1f0cdfb9 --- /dev/null +++ b/backend/db/simulation/3.task.sql @@ -0,0 +1,154 @@ +DROP TABLE IF EXISTS task; +DROP TABLE IF EXISTS task_assignees; +DROP TABLE IF EXISTS task_labels; + +CREATE TYPE task_assignment_status AS ENUM ('ACCEPTED', 'DECLINED', 'NOTIFIED'); +CREATE TYPE task_status AS ENUM ('INCOMPLETE', 'COMPLETE', 'INPROGRESS', +'OVERDUE', 'TODO'); +CREATE TYPE task_type AS ENUM ('med_mgmt', 'dr_appt', 'diet', 'grmg', 'fml_convos', 'shpping', 'activities', 'hlth_ins', 'financial', 'other'); + +CREATE TABLE IF NOT EXISTS task ( + task_id serial NOT NULL, + task_title varchar NOT NULL, + group_id integer NOT NULL, + created_by varchar NOT NULL, + created_date timestamp NOT NULL, -- add default val with current timestamp? + start_date timestamp NOT NULL, + end_date timestamp NOT NULL, + quick_task BOOLEAN DEFAULT FALSE, + notes varchar, + repeating BOOLEAN DEFAULT FALSE, + repeating_interval varchar, + repeating_end_date timestamp, + task_status task_status NOT NULL, + task_type task_type NOT NULL, -- (eg. medication management, dr appointment, etc.) + task_info json, + PRIMARY KEY (task_id), + FOREIGN KEY (group_id) REFERENCES care_group (group_id), + FOREIGN KEY (created_by) REFERENCES users (user_id) +); + +CREATE TABLE IF NOT EXISTS task_assignees ( + task_id integer NOT NULL, + user_id varchar NOT NULL, + assignment_status task_assignment_status NOT NULL, + assigned_by varchar NOT NULL, + assigned_date timestamp NOT NULL, -- add default val with current timestamp? + last_notified timestamp, + PRIMARY KEY (task_id, user_id), + FOREIGN KEY (task_id) REFERENCES task (task_id), + FOREIGN KEY (user_id) REFERENCES users (user_id), + FOREIGN KEY (assigned_by) REFERENCES users (user_id) +); + +-- Insert tasks for Matt McCoy +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Take Care of Grandpa', 5, 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', '2020-02-05 11:00:00', '2024-04-19 23:00:00', '2024-04-19 24:00:00', 'Grandpa Needs His Medicine', 'INPROGRESS', 'financial', FALSE), + ('Grocery Shopping', 5, 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', '2020-02-06 09:00:00', '2024-04-20 14:00:00', '2024-04-20 15:00:00', 'Buy groceries for the week', 'TODO', 'other', FALSE), + ('Prepare Presentation', 5, 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', '2020-02-07 13:00:00', '2024-04-21 10:00:00', '2024-04-21 12:00:00', 'Prepare slides for the team meeting', 'TODO', 'med_mgmt', FALSE) +; + +-- Insert tasks for Andy Cap +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Call Client', 5, 'JamnX6TZf0dt6juozMRzNG5LMQd2', '2020-02-08 10:00:00', '2024-04-19 09:30:00', '2024-04-19 10:00:00', 'Discuss project updates with the client', 'INPROGRESS', 'med_mgmt', FALSE), + ('Review Report', 5, 'JamnX6TZf0dt6juozMRzNG5LMQd2', '2020-02-09 14:00:00', '2024-04-20 09:00:00', '2024-04-20 11:00:00', 'Review quarterly financial report', 'TODO', 'financial', FALSE), + ('Send Email', 5, 'JamnX6TZf0dt6juozMRzNG5LMQd2', '2020-02-10 16:00:00', '2024-04-19 12:00:00', '2024-04-19 13:00:00', 'Send follow-up email to the team', 'TODO', 'dr_appt', FALSE) +; + +-- Insert tasks for Ansh Patel +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Attend Meeting', 5, 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', '2020-02-11 09:00:00', '2024-04-19 09:30:00', '2024-04-19 10:30:00', 'Attend weekly team meeting', 'TODO', 'dr_appt', FALSE), + ('Exercise', 5, 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', '2020-02-12 07:00:00', '2024-04-20 07:30:00', '2024-04-20 08:30:00', 'Morning jog', 'TODO', 'financial', FALSE), + ('Submit Expense Report', 5, 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', '2020-02-13 15:00:00', '2024-04-21 13:00:00', '2024-04-21 14:00:00', 'Submit expenses for reimbursement', 'TODO', 'financial', FALSE) +; + +-- Insert tasks for Olivia Sedarski +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Read Book', 5, 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', '2020-02-14 10:00:00', '2024-04-20 12:00:00', '2024-04-20 12:00:00', 'Read new novel', 'TODO', 'med_mgmt', FALSE), + ('Attend Webinar', 5, 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', '2020-02-15 13:00:00', '2024-04-19 15:30:00', '2024-04-19 17:00:00', 'Attend webinar on project management', 'TODO', 'other', FALSE), + ('Call Family', 5, 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', '2020-02-16 18:00:00', '2024-04-20 18:30:00', '2024-04-20 19:00:00', 'Catch up with family', 'TODO', 'financial', FALSE) +; + +-- Insert tasks for Danny Rollo +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Workout', 5, 'pTBhZsE9BaOxltkGUfoBAUDote43', '2020-02-17 08:00:00', '2024-04-19 08:30:00', '2024-04-19 09:30:00', 'Gym session', 'TODO', 'financial', FALSE), + ('Update Resume', 5, 'pTBhZsE9BaOxltkGUfoBAUDote43', '2020-02-18 11:00:00', '2024-04-20 08:30:00', '2024-04-20 09:30:00', 'Add recent achievements', 'TODO', 'other', TRUE), + ('Grocery Shopping', 5, 'pTBhZsE9BaOxltkGUfoBAUDote43', '2020-02-19 14:00:00', '2024-04-19 14:30:00', '2024-04-19 15:30:00', 'Buy groceries for the week', 'TODO', 'other', FALSE) +; + +-- Insert tasks for Narayan Sharma +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Sit with Grandpa', 5, '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', '2020-02-17 08:00:00', '2024-04-19 22:30:00', '2024-04-19 23:30:00', 'Gym session', 'TODO', 'financial', FALSE), + ('Grandpas Sheets', 5, '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', '2020-02-18 11:00:00', '2024-04-20 10:00:00', '2024-04-20 12:00:00', 'Add recent achievements', 'TODO', 'med_mgmt', TRUE), + ('Grandpa Laundry', 5, '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', '2020-02-19 14:00:00', '2024-04-20 14:30:00', '2024-04-20 15:30:00', 'Buy groceries for the week', 'TODO', 'other', FALSE) +; + +-- Insert tasks for Caitlin Flynn +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Eat with Grandpa', 5, 'iL7PnjS4axQffmlPceobjUUZ9DF2', '2020-02-17 08:00:00', '2024-04-19 10:30:00', '2024-04-19 11:30:00', 'Gym session', 'TODO', 'financial', FALSE), + ('Take a walk with grandpa', 5, 'iL7PnjS4axQffmlPceobjUUZ9DF2', '2020-02-18 11:00:00', '2024-04-20 10:00:00', '2024-04-20 12:00:00', 'Add recent achievements', 'TODO', 'med_mgmt', FALSE), + ('Grocery Shopping', 5, 'iL7PnjS4axQffmlPceobjUUZ9DF2', '2020-02-19 14:00:00', '2024-04-19 14:30:00', '2024-04-19 15:30:00', 'Buy groceries for the week', 'TODO', 'other', FALSE) +; + +-- Insert tasks for Chris Wyatt +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Take a walk', 5, 'P03ggWcw63N0RSY7ltbkeBoR6bd2', '2020-02-17 08:00:00', '2024-04-19 20:30:00', '2024-04-19 21:30:00', 'Gym session', 'TODO', 'financial', FALSE), + ('Get medicine', 5, 'P03ggWcw63N0RSY7ltbkeBoR6bd2', '2020-02-18 11:00:00', '2024-04-19 10:00:00', '2024-04-19 12:00:00', 'Add recent achievements', 'TODO', 'med_mgmt', FALSE), + ('Grocery Shopping', 5, 'P03ggWcw63N0RSY7ltbkeBoR6bd2', '2020-02-19 14:00:00', '2024-04-19 14:30:00', '2024-04-18 15:30:00', 'Buy groceries for the week', 'TODO', 'other', FALSE) +; + +-- Insert tasks for Hayley Martin +INSERT INTO task (task_title, group_id, created_by, created_date, start_date, end_date, notes, task_status, task_type, quick_task) +VALUES + ('Get a snack', 5, '9rIMSUo6qNf8ToTABkCfNqnByRv1', '2020-02-17 08:00:00', '2024-04-19 08:30:00', '2024-04-19 09:30:00', 'Gym session', 'TODO', 'financial', FALSE), + ('listen to music with grandpa', 5, '9rIMSUo6qNf8ToTABkCfNqnByRv1', '2020-02-18 11:00:00', '2024-04-22 10:00:00', '2024-04-22 12:00:00', 'Add recent achievements', 'TODO', 'med_mgmt', FALSE), + ('Grocery Shopping', 5, '9rIMSUo6qNf8ToTABkCfNqnByRv1', '2020-02-19 14:00:00', '2024-04-22 14:30:00', '2024-04-22 15:30:00', 'Buy groceries for the week', 'TODO', 'other', FALSE) +; + + +INSERT INTO task_assignees (task_id, user_id, assignment_status, assigned_by, assigned_date) +VALUES + (1, 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', 'ACCEPTED', 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', NOW()), + (2, 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', 'ACCEPTED', 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', NOW()), + (3, 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', 'ACCEPTED', 'fIoFY26mJnYWH8sNdfuVoxpnVnr1', NOW()), + + (4, 'JamnX6TZf0dt6juozMRzNG5LMQd2', 'ACCEPTED', 'JamnX6TZf0dt6juozMRzNG5LMQd2', NOW()), + (5, 'JamnX6TZf0dt6juozMRzNG5LMQd2', 'ACCEPTED', 'JamnX6TZf0dt6juozMRzNG5LMQd2', NOW()), + (6, 'JamnX6TZf0dt6juozMRzNG5LMQd2', 'ACCEPTED', 'JamnX6TZf0dt6juozMRzNG5LMQd2', NOW()), + + (7, 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', 'ACCEPTED', 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', NOW()), + (8, 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', 'ACCEPTED', 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', NOW()), + (9, 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', 'ACCEPTED', 'BLq3MXk4rVg4RKuYiMd7aEmMhsz1', NOW()), + + (10, 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', 'ACCEPTED', 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', NOW()), + (11, 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', 'ACCEPTED', 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', NOW()), + (12, 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', 'ACCEPTED', 'mPeo3d3MiXfnpPJADWgFD9ZcB2M2', NOW()), + + (13, 'pTBhZsE9BaOxltkGUfoBAUDote43', 'ACCEPTED', 'pTBhZsE9BaOxltkGUfoBAUDote43', NOW()), + (14, 'pTBhZsE9BaOxltkGUfoBAUDote43', 'ACCEPTED', 'pTBhZsE9BaOxltkGUfoBAUDote43', NOW()), + (15, 'pTBhZsE9BaOxltkGUfoBAUDote43', 'ACCEPTED', 'pTBhZsE9BaOxltkGUfoBAUDote43', NOW()), + + (16, '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', 'ACCEPTED', '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', NOW()), + (17, '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', 'ACCEPTED', '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', NOW()), + (18, '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', 'ACCEPTED', '8Sy7xBkGiGQv4ZKphcQfY8PxAqw1', NOW()), + + (19, 'iL7PnjS4axQffmlPceobjUUZ9DF2', 'ACCEPTED', 'iL7PnjS4axQffmlPceobjUUZ9DF2', NOW()), + (20, 'iL7PnjS4axQffmlPceobjUUZ9DF2', 'ACCEPTED', 'iL7PnjS4axQffmlPceobjUUZ9DF2', NOW()), + (21, 'iL7PnjS4axQffmlPceobjUUZ9DF2', 'ACCEPTED', 'iL7PnjS4axQffmlPceobjUUZ9DF2', NOW()), + + (22, 'P03ggWcw63N0RSY7ltbkeBoR6bd2', 'ACCEPTED', 'P03ggWcw63N0RSY7ltbkeBoR6bd2', NOW()), + (23, 'P03ggWcw63N0RSY7ltbkeBoR6bd2', 'ACCEPTED', 'P03ggWcw63N0RSY7ltbkeBoR6bd2', NOW()), + (24, 'P03ggWcw63N0RSY7ltbkeBoR6bd2', 'ACCEPTED', 'P03ggWcw63N0RSY7ltbkeBoR6bd2', NOW()), + + (22, '9rIMSUo6qNf8ToTABkCfNqnByRv1', 'ACCEPTED', '9rIMSUo6qNf8ToTABkCfNqnByRv1', NOW()), + (23, '9rIMSUo6qNf8ToTABkCfNqnByRv1', 'ACCEPTED', '9rIMSUo6qNf8ToTABkCfNqnByRv1', NOW()), + (24, '9rIMSUo6qNf8ToTABkCfNqnByRv1', 'ACCEPTED', '9rIMSUo6qNf8ToTABkCfNqnByRv1', NOW()) +; diff --git a/backend/db/simulation/4.label.sql b/backend/db/simulation/4.label.sql new file mode 100644 index 00000000..27e1fa9d --- /dev/null +++ b/backend/db/simulation/4.label.sql @@ -0,0 +1,54 @@ + DROP TABLE IF EXISTS label; + + CREATE TABLE If NOT EXISTS label ( + group_id integer NOT NULL, + label_name varchar NOT NULL, + label_color varchar NOT NULL, + PRIMARY KEY (group_id, label_name), + FOREIGN KEY (group_id) REFERENCES care_group (group_id) +); + + CREATE TABLE If NOT EXISTS task_labels ( + task_id integer NOT NULL, + group_id integer NOT NULL, + label_name varchar NOT NULL, + PRIMARY KEY (task_id, label_name), + FOREIGN KEY (task_id) REFERENCES task (task_id) ON UPDATE CASCADE, + FOREIGN KEY (group_id, label_name) REFERENCES label (group_id, label_name) ON UPDATE CASCADE +); + +INSERT INTO label (group_id, label_name, label_color) +VALUES + (5, 'Financial', 'orange'), + (5, 'Appointments', 'green'), + (5, 'Medication', 'red'), + (5, 'Household', 'purple') +; + +INSERT INTO task_labels (task_id, group_id, label_name) +VALUES + (1, 5, 'Financial'), + (2, 5, 'Appointments'), + (3, 5, 'Medication'), + (4, 5, 'Financial'), + (5, 5, 'Appointments'), + (6, 5, 'Financial'), + (7, 5, 'Appointments'), + (8, 5, 'Medication'), + (9, 5, 'Appointments'), + (10, 5, 'Financial'), + (11, 5, 'Household'), + (12, 5, 'Financial'), + (13, 5, 'Appointments'), + (14, 5, 'Medication'), + (15, 5, 'Appointments'), + (16, 5, 'Financial'), + (17, 5, 'Household'), + (18, 5, 'Financial'), + (19, 5, 'Appointments'), + (20, 5, 'Financial'), + (21, 5, 'Household'), + (22, 5, 'Financial'), + (23, 5, 'Appointments'), + (24, 5, 'Financial') +; diff --git a/backend/db/simulation/5.files.sql b/backend/db/simulation/5.files.sql new file mode 100644 index 00000000..ae14204f --- /dev/null +++ b/backend/db/simulation/5.files.sql @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS files; + +CREATE TABLE IF NOT EXISTS files ( + file_id serial NOT NULL UNIQUE, + file_name varchar NOT NULL, + group_id integer NOT NULL, + upload_by varchar NOT NULL, + upload_date timestamp, + file_size integer NOT NULL, + task_id integer, + notes varchar, + label_name varchar, + PRIMARY KEY (file_id), + FOREIGN KEY (group_id) REFERENCES care_group (group_id), + FOREIGN KEY (upload_by) REFERENCES users (user_id), + FOREIGN KEY (task_id) REFERENCES task (task_id) +); diff --git a/client/components/Dropdown.tsx b/client/components/Dropdown.tsx index 3840326c..bd98cd27 100644 --- a/client/components/Dropdown.tsx +++ b/client/components/Dropdown.tsx @@ -19,7 +19,7 @@ export function CWDropdown({ {isOpen && ( - {selected !== 'Select Label' && ( + {selected !== 'Select' && ( { diff --git a/client/components/GetCategoryPill.tsx b/client/components/GetCategoryPill.tsx new file mode 100644 index 00000000..c20d2965 --- /dev/null +++ b/client/components/GetCategoryPill.tsx @@ -0,0 +1,102 @@ +import React from 'react'; +import { Text, View } from 'react-native'; + +import { clsx } from 'clsx'; + +import { + CategoryIconsMap, + TaskTypeDescriptions, + TypeToCategoryMap +} from '../types/type'; + +export function GetCategoryPill({ category }: { category: string }) { + console.log('category', TypeToCategoryMap[category]); + switch (TypeToCategoryMap[category]) { + case 'Health & Medical': + return ( + + {CategoryIconsMap[TypeToCategoryMap[category]]} + + {TaskTypeDescriptions[category]} + + + ); + case 'Home & Lifestyle': + return ( + + {CategoryIconsMap[TypeToCategoryMap[category]]} + + {TaskTypeDescriptions[category]} + + + ); + case 'Personal': + return ( + + {CategoryIconsMap[TypeToCategoryMap[category]]} + + {TaskTypeDescriptions[category]} + + + ); + case 'Financial & Legal': + return ( + + {CategoryIconsMap[TypeToCategoryMap[category]]} + + {TaskTypeDescriptions[category]} + + + ); + default: + return ( + + {CategoryIconsMap[TypeToCategoryMap[category]]} + + {TaskTypeDescriptions[category]} + + + ); + } +} diff --git a/client/components/calendar/QuickTask.tsx b/client/components/calendar/QuickTask.tsx index 6f1604ee..5c66dbe9 100644 --- a/client/components/calendar/QuickTask.tsx +++ b/client/components/calendar/QuickTask.tsx @@ -57,7 +57,7 @@ export function QuickTask({ }} > diff --git a/client/components/calendar/TaskInfoCard.tsx b/client/components/calendar/TaskInfoCard.tsx index d9123305..bdd76bee 100644 --- a/client/components/calendar/TaskInfoCard.tsx +++ b/client/components/calendar/TaskInfoCard.tsx @@ -1,18 +1,13 @@ import React from 'react'; import { Text, View } from 'react-native'; -import { clsx } from 'clsx'; import moment from 'moment'; import Calendar from '../../assets/Date_today.svg'; import Time from '../../assets/Time.svg'; import { Task } from '../../types/task'; import { TaskLabel } from '../../types/taskLabel'; -import { - CategoryIconsMap, - TaskTypeDescriptions, - TypeToCategoryMap -} from '../../types/type'; +import { GetCategoryPill } from '../GetCategoryPill'; function statusToString(status: string) { switch (status) { @@ -29,36 +24,6 @@ function statusToString(status: string) { } } -function categoryToColor(category: string) { - switch (TaskTypeDescriptions[category]) { - case 'Medication Management': - return 'carewallet-pink'; - case 'Doctor Appointment': - return 'carewallet-pink'; - case 'Financial Task': - return 'carewallet-green'; - case 'OTHER': - return 'carewallet-white'; - default: - return 'carewallet-white'; - } -} - -function categoryToBGColor(category: string) { - switch (TaskTypeDescriptions[category]) { - case 'Medication Management': - return 'bg-carewallet-pink/20'; - case 'Doctor Appointment': - return 'bg-carewallet-pink/20'; - case 'Financial Task': - return 'bg-carewallet-green/10'; - case 'OTHER': - return 'bg-carewallet-white'; - default: - return 'bg-carewallet-white'; - } -} - export function TaskInfoComponent({ task, taskLabels @@ -66,11 +31,22 @@ export function TaskInfoComponent({ task: Task; taskLabels: TaskLabel[] | undefined; }) { + const time = `${ + moment(task?.start_date).format('HH DD YYYY') === + moment(task?.end_date).format('HH DD YYYY') + ? moment(task?.start_date).format('h:mm A') + : `${ + moment(task?.start_date).format('A') === + moment(task?.end_date).format('A') + ? moment(task?.start_date).format('h:mm') + : moment(task?.start_date).format('h:mm A') + } - ${moment(task?.end_date).format('h:mm A')}` + }`; return ( - + {task.task_title} @@ -92,28 +68,12 @@ export function TaskInfoComponent({ - - - {CategoryIconsMap[TypeToCategoryMap[task?.task_type ?? 'Other']]} - - - {TaskTypeDescriptions[task.task_type]} - - + {taskLabels && taskLabels.map((label) => ( diff --git a/client/components/calendar/TimelineList.tsx b/client/components/calendar/TimelineList.tsx index ddcd612c..1686c974 100644 --- a/client/components/calendar/TimelineList.tsx +++ b/client/components/calendar/TimelineList.tsx @@ -12,7 +12,6 @@ import { import Time from '../../assets/Time.svg'; import { AppStackNavigation } from '../../navigation/types'; -import { useTaskById } from '../../services/task'; import { Task } from '../../types/task'; import { CategoryIconsMap, TypeToCategoryMap } from '../../types/type'; @@ -34,7 +33,7 @@ export function CWTimelineList({ { - const { task } = useTaskById(item.id ?? ''); + const task = tasks.find((t) => `${t.task_id}` === item.id); // if same just show start, if both same time frame (AM/PM) show time frame at end otherwise show all const time = `${ moment(task?.start_date).format('HH DD YYYY') === diff --git a/client/components/file_management/FileTile.tsx b/client/components/file_management/FileTile.tsx index 60288a23..d454cf7f 100644 --- a/client/components/file_management/FileTile.tsx +++ b/client/components/file_management/FileTile.tsx @@ -19,9 +19,19 @@ export function FileTile({ name, label, url }: FileTileProps): JSX.Element { className="h-full w-full flex-1 rounded-md border border-carewallet-gray" /> - - {name} - {label} + + + + {name} + + + {label && ( + + + {label} + + + )} diff --git a/client/components/home/TaskList.tsx b/client/components/home/TaskList.tsx index 9b6b12fb..2a2987a6 100644 --- a/client/components/home/TaskList.tsx +++ b/client/components/home/TaskList.tsx @@ -18,7 +18,7 @@ export function TaskList() { const navigation = useNavigation(); return ( - + { diff --git a/client/navigation/AppNavigation.tsx b/client/navigation/AppNavigation.tsx index 8f0b4bbc..a5e4315e 100644 --- a/client/navigation/AppNavigation.tsx +++ b/client/navigation/AppNavigation.tsx @@ -13,7 +13,8 @@ export function AppNavigation() { return ( diff --git a/client/navigation/AppStackBottomTabNavigator.tsx b/client/navigation/AppStackBottomTabNavigator.tsx index 3e39bbda..70c508cb 100644 --- a/client/navigation/AppStackBottomTabNavigator.tsx +++ b/client/navigation/AppStackBottomTabNavigator.tsx @@ -19,6 +19,7 @@ export function AppStackBottomTabNavigator() { screenOptions={{ tabBarActiveTintColor: 'white', tabBarInactiveTintColor: '#D9D9D9', + freezeOnBlur: true, tabBarStyle: { backgroundColor: '#1A56C4' }, diff --git a/client/navigation/containers/CalendarNavigationContainer.tsx b/client/navigation/containers/CalendarNavigationContainer.tsx index da3185b9..6b6c2ece 100644 --- a/client/navigation/containers/CalendarNavigationContainer.tsx +++ b/client/navigation/containers/CalendarNavigationContainer.tsx @@ -10,7 +10,8 @@ export function CalendarNavigationContainer() { return ( diff --git a/client/navigation/containers/HomeNavigationContainer.tsx b/client/navigation/containers/HomeNavigationContainer.tsx index 5dead7bd..db4fb17a 100644 --- a/client/navigation/containers/HomeNavigationContainer.tsx +++ b/client/navigation/containers/HomeNavigationContainer.tsx @@ -10,7 +10,8 @@ export function HomeNavigationContainer() { return ( diff --git a/client/navigation/containers/SingleTaskNavigationContainer.tsx b/client/navigation/containers/SingleTaskNavigationContainer.tsx deleted file mode 100644 index eab541a6..00000000 --- a/client/navigation/containers/SingleTaskNavigationContainer.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; - -import FileUploadScreen from '../../screens/FileUpload'; -import { AppStack } from '../types'; - -export function SingleTaskNavigationContainer() { - return ( - - - - ); -} diff --git a/client/screens/Calendar.tsx b/client/screens/Calendar.tsx index 4ef486bb..1dc3dcc7 100644 --- a/client/screens/Calendar.tsx +++ b/client/screens/Calendar.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useRef, useState } from 'react'; -import { ActivityIndicator, SafeAreaView, Text, View } from 'react-native'; +import { ActivityIndicator, Text, View } from 'react-native'; import BottomSheet from '@gorhom/bottom-sheet'; import { useNavigation } from '@react-navigation/native'; @@ -19,6 +19,7 @@ import { CWExpanableCalendar } from '../components/calendar/ExpandableCalendar'; import { QuickTask } from '../components/calendar/QuickTask'; import { CWTimelineList } from '../components/calendar/TimelineList'; import { useCareWalletContext } from '../contexts/CareWalletContext'; +import { MainLayout } from '../layouts/MainLayout'; import { AppStackNavigation } from '../navigation/types'; import { useFilteredTasks } from '../services/task'; import { Task } from '../types/task'; @@ -147,43 +148,45 @@ export default function TimelineCalendarScreen() { } return ( - - - - - - + + + + + + + navigation.navigate('TaskType')} + > + + + + + - navigation.navigate('TaskType')} - > - + - - - - - + + + ); } diff --git a/client/screens/FileUpload.tsx b/client/screens/FileUpload.tsx index d0eebf82..fe8683d1 100644 --- a/client/screens/FileUpload.tsx +++ b/client/screens/FileUpload.tsx @@ -21,7 +21,7 @@ export default function FileUploadScreen() { const { user, group } = useCareWalletContext(); const { uploadFileMutation } = useFile(); const [fileTitle, setFileTitle] = useState(''); - const [label, setLabel] = useState({ label: 'Select Label', value: '' }); + const [label, setLabel] = useState({ label: 'Select', value: '' }); const [additionalNotes, setAdditionalNotes] = useState(''); const [pickedFile, setPickedFile] = useState( null @@ -67,7 +67,7 @@ export default function FileUploadScreen() { }); setFileTitle(''); - setLabel({ label: 'Select Label', value: '' }); + setLabel({ label: 'Select', value: '' }); setAdditionalNotes(''); setPickedFile(null); } diff --git a/client/screens/Home.tsx b/client/screens/Home.tsx index 8e6d428c..39b71b26 100644 --- a/client/screens/Home.tsx +++ b/client/screens/Home.tsx @@ -17,21 +17,25 @@ export default function Home() {
- - - Health Overview - - - There are no health stats to view. - - - - - - You have no recent notifications. + + + + Health Overview + + + There are no health stats to view. + + + + + You have no recent notifications. + + + + ); } diff --git a/client/screens/SingleTask.tsx b/client/screens/SingleTask.tsx index 1fdc5932..b922e7cc 100644 --- a/client/screens/SingleTask.tsx +++ b/client/screens/SingleTask.tsx @@ -2,7 +2,6 @@ import React from 'react'; import { ActivityIndicator, Text, View } from 'react-native'; import { RouteProp, useRoute } from '@react-navigation/native'; -import { clsx } from 'clsx'; import moment from 'moment'; import { IconButton } from 'react-native-paper'; import { WebView } from 'react-native-webview'; @@ -12,18 +11,14 @@ import Edit from '../assets/profile/edit.svg'; import Clock from '../assets/profile/settings/clock.svg'; import Repeating from '../assets/repeating.svg'; import { DropUp } from '../components/DropUp'; +import { GetCategoryPill } from '../components/GetCategoryPill'; import { GetStatusPill } from '../components/GetStatusPill'; import { BackButton } from '../components/nav_buttons/BackButton'; import { MainLayout } from '../layouts/MainLayout'; import { useProfileFile } from '../services/file'; import { useTaskById } from '../services/task'; import { useUser } from '../services/user'; -import { - CategoryIconsMap, - Status, - TaskTypeDescriptions, - TypeToCategoryMap -} from '../types/type'; +import { Status } from '../types/type'; type ParamList = { mt: { @@ -31,35 +26,6 @@ type ParamList = { }; }; -function categoryToColor(category: string) { - switch (TaskTypeDescriptions[category]) { - case 'Medication Management': - return 'carewallet-pink'; - case 'Doctor Appointment': - return 'carewallet-pink'; - case 'Financial Task': - return 'carewallet-green'; - case 'OTHER': - return 'carewallet-white'; - default: - return 'carewallet-white'; - } -} -function categoryToBGColor(category: string) { - switch (TaskTypeDescriptions[category]) { - case 'Medication Management': - return 'bg-carewallet-pink/20'; - case 'Doctor Appointment': - return 'bg-carewallet-pink/20'; - case 'Financial Task': - return 'bg-carewallet-green/10'; - case 'OTHER': - return 'bg-carewallet-white'; - default: - return 'bg-carewallet-white'; - } -} - export default function SingleTaskScreen() { const route = useRoute>(); const { id } = route.params; @@ -71,6 +37,9 @@ export default function SingleTaskScreen() { updateTaskStatusMutation } = useTaskById(id); + console.log('task', id); + console.log(task?.task_type); + const { user } = useUser(assigned ?? ''); const { file } = useProfileFile(user?.profile_picture); @@ -156,25 +125,7 @@ export default function SingleTaskScreen() { - - - { - CategoryIconsMap[ - TypeToCategoryMap[task?.task_type ?? 'Other'] - ] - } - - - {TaskTypeDescriptions[task?.task_type ?? '']} - - + {taskLabels?.map((label, index) => ( diff --git a/client/screens/TaskCreation/AddTaskDetails.tsx b/client/screens/TaskCreation/AddTaskDetails.tsx index a00f64e0..840263b5 100644 --- a/client/screens/TaskCreation/AddTaskDetails.tsx +++ b/client/screens/TaskCreation/AddTaskDetails.tsx @@ -138,13 +138,13 @@ export default function AddTaskDetails() { }; // Task label - const [label, setLabel] = useState('SELECT'); + const [label, setLabel] = useState('Select'); useEffect(() => { handleChange('Label', label); }, [label]); // Assigned to task - const [assignedTo, setAssignedTo] = useState({ label: 'SELECT', value: '' }); + const [assignedTo, setAssignedTo] = useState({ label: 'Select', value: '' }); useEffect(() => { handleChange('Assigned To', assignedTo.value); }, [assignedTo]); @@ -206,11 +206,12 @@ export default function AddTaskDetails() { const assignedToUserId = taskDetails['Assigned To']; const newTask: Task = { + task_id: -1, task_title: taskDetails['Title'], group_id: 5, // hard coded group ID created_by: user.userID, - start_date: startDate.format(), - end_date: repeatingEndDate.format(), + start_date: startDate.add(1, 'day').format(), + end_date: repeatingEndDate.add(1, 'day').format(), quick_task: taskDetails['Schedule Type'] === 'Quick Task', notes: taskDetails['Description'] || taskSpecificsMap['Notes'] || '', repeating: repeating, diff --git a/client/screens/TaskList.tsx b/client/screens/TaskList.tsx index 89469c94..94c141bf 100644 --- a/client/screens/TaskList.tsx +++ b/client/screens/TaskList.tsx @@ -8,7 +8,6 @@ import React, { import { ActivityIndicator, Pressable, - SafeAreaView, ScrollView, Text, TextInput, @@ -18,6 +17,7 @@ import { import BottomSheet, { BottomSheetBackdrop } from '@gorhom/bottom-sheet'; import { BottomSheetDefaultBackdropProps } from '@gorhom/bottom-sheet/lib/typescript/components/bottomSheetBackdrop/types'; import { useNavigation } from '@react-navigation/native'; +import moment from 'moment'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { Button } from 'react-native-paper'; @@ -26,6 +26,7 @@ import { CalendarTaskListTopNav } from '../components/calendar/CalendarTaskListT import { TaskInfoComponent } from '../components/calendar/TaskInfoCard'; import { FilterBottomSheet } from '../components/filter/FilterBottomSheet'; import { useCareWalletContext } from '../contexts/CareWalletContext'; +import { MainLayout } from '../layouts/MainLayout'; import { AppStackNavigation } from '../navigation/types'; import { useGroup } from '../services/group'; import { useLabelsByTasks } from '../services/label'; @@ -85,14 +86,14 @@ export default function TaskListScreen() { }); // Filter tasks based on categories - const pastDueTasks = tasks?.filter( - (task) => task?.end_date || '' < String(new Date()) + const pastDueTasks = tasks?.filter((task) => + moment(task?.end_date).isBefore(moment()) ); const inProgressTasks = tasks?.filter( (task) => task?.task_status === 'PARTIAL' ); - const inFutureTasks = tasks?.filter( - (task) => (task?.start_date || '') > String(new Date()) + const inFutureTasks = tasks?.filter((task) => + moment(task?.end_date).isAfter(moment()) ); const completeTasks = tasks?.filter( (task) => task?.task_status === 'COMPLETE' @@ -144,11 +145,11 @@ export default function TaskListScreen() { } return ( - + setCanPress(false)} onScrollEndDrag={() => setCanPress(true)} > @@ -193,6 +194,6 @@ export default function TaskListScreen() { setFilters={setFilters} /> - + ); } diff --git a/client/services/task.ts b/client/services/task.ts index 3a2eef45..f9846d1d 100644 --- a/client/services/task.ts +++ b/client/services/task.ts @@ -61,11 +61,15 @@ const addNewTask = async (newTask: Task): Promise => { group_id: newTask.group_id, // Adjust the group_id as needed label_name: newTask.label // Adjust the label_name as needed }; - const label_response = await axios.post( - `${api_url}/tasks/${task_response.data['task_id']}/labels`, - label_body - ); - console.log('Added label: ', label_response.data); + + if (newTask.label === '') { + const label_response = await axios.post( + `${api_url}/tasks/${task_response.data['task_id']}/labels`, + label_body + ); + + console.log('Added label: ', label_response.data); + } const assigned_to_body = { assigner: newTask.created_by, @@ -73,6 +77,7 @@ const addNewTask = async (newTask: Task): Promise => { }; console.log('Assigning task to user: ', newTask.assigned_to); + const assigned_to_response = await axios.post( `${api_url}/tasks/${task_response.data['task_id']}/assign`, assigned_to_body @@ -96,8 +101,7 @@ export const useFilteredTasks = (queryParams: TaskQueryParams) => { refetch: refetchTask } = useQuery({ queryKey: ['filteredTaskList'], - queryFn: () => getFilteredTasks(queryParams), - refetchInterval: 20000 + queryFn: () => getFilteredTasks(queryParams) }); return { tasks, diff --git a/client/tailwind.config.js b/client/tailwind.config.js index ba084b53..97a286b9 100644 --- a/client/tailwind.config.js +++ b/client/tailwind.config.js @@ -18,6 +18,7 @@ module.exports = { 'carewallet-gray': '#BEBEBE', 'carewallet-lightgray': '#D9D9D9', 'carewallet-lightergray': '#0000000D', + 'carewallet-lightblue': '#DDE6F6', 'carewallet-blue': '#1A56C4', 'carewallet-green': '#4DB8A6', 'carewallet-coral': '#FF6258', diff --git a/client/types/task.ts b/client/types/task.ts index 1646dc64..d1243b44 100644 --- a/client/types/task.ts +++ b/client/types/task.ts @@ -1,4 +1,5 @@ export interface Task { + task_id: number; task_title: string; group_id: number; created_by: string; diff --git a/client/types/type.tsx b/client/types/type.tsx index bc66b2b2..782fc708 100644 --- a/client/types/type.tsx +++ b/client/types/type.tsx @@ -4,6 +4,7 @@ import FinancialLegal from '../assets/calendar/financial&legal.svg'; import HealthMedical from '../assets/calendar/health&medical.svg'; import HomeLifestyle from '../assets/calendar/home&lifestyle.svg'; import Personal from '../assets/calendar/personal.svg'; +import Other from '../assets/task-creation/other.svg'; export enum TypeOfTask { MEDICATION = 'Medication Management', @@ -39,7 +40,13 @@ export const TypeToCategoryMap: Record = { med_mgmt: Category.HEALTH, dr_appt: Category.HEALTH, financial: Category.FINANCIAL, - other: Category.OTHER + other: Category.OTHER, + diet: Category.HEALTH, + grmg: Category.PERSONAL, + fml_convos: Category.PERSONAL, + shpping: Category.PERSONAL, + activities: Category.HOME, + hlth_ins: Category.FINANCIAL }; export const CategoryToTypeMap: Record = { @@ -90,5 +97,6 @@ export const CategoryIconsMap: Record = { 'Financial & Legal': , 'Health & Medical': , 'Home & Lifestyle': , - Personal: + Personal: , + Other: }; diff --git a/docker-compose.yaml b/docker-compose.yaml index dae2306a..f2d3a0c6 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -14,7 +14,7 @@ services: ports: - "5434:5432" volumes: - - ./backend/db/migrations:/docker-entrypoint-initdb.d/ + - ./backend/db/simulation:/docker-entrypoint-initdb.d/ volumes: db: driver: local