diff --git a/.direnv/bin/nix-direnv-reload b/.direnv/bin/nix-direnv-reload deleted file mode 100755 index d07ca27..0000000 --- a/.direnv/bin/nix-direnv-reload +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -set -e -if [[ ! -d "/home/amy/code/public/oss/frontend" ]]; then - echo "Cannot find source directory; Did you move it?" - echo "(Looking for "/home/amy/code/public/oss/frontend")" - echo 'Cannot force reload with this script - use "direnv reload" manually and then try again' - exit 1 -fi - -# rebuild the cache forcefully -_nix_direnv_force_reload=1 direnv exec "/home/amy/code/public/oss/frontend" true - -# Update the mtime for .envrc. -# This will cause direnv to reload again - but without re-building. -touch "/home/amy/code/public/oss/frontend/.envrc" - -# Also update the timestamp of whatever profile_rc we have. -# This makes sure that we know we are up to date. -touch -r "/home/amy/code/public/oss/frontend/.envrc" "/home/amy/code/public/oss/frontend/.direnv"/*.rc diff --git a/.envrc b/.envrc deleted file mode 100644 index 3550a30..0000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use flake diff --git a/README.md b/README.md index b235431..e24c032 100644 --- a/README.md +++ b/README.md @@ -49,4 +49,4 @@ While maintaining Donetick's commitment to open source, this hosted option will ## License -This project is licensed under the AGPLv3 License. See the [LICENSE](LICENSE) file for more details. I might consider changing it later to something else +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details. I might consider changing it later to something else diff --git a/flake.lock b/flake.lock deleted file mode 100644 index d28337e..0000000 --- a/flake.lock +++ /dev/null @@ -1,61 +0,0 @@ -{ - "nodes": { - "flake-parts": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib" - }, - "locked": { - "lastModified": 1743550720, - "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "c621e8422220273271f52058f618c94e405bb0f5", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1743583204, - "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-lib": { - "locked": { - "lastModified": 1743296961, - "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", - "type": "github" - } - }, - "root": { - "inputs": { - "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 1ecdaaa..0000000 --- a/flake.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - description = "Description for the project"; - - inputs = { - flake-parts.url = "github:hercules-ci/flake-parts"; - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - }; - - outputs = inputs@{ flake-parts, ... }: - flake-parts.lib.mkFlake { inherit inputs; } { - systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ]; - perSystem = { config, self', inputs', pkgs, system, ... }: { - devShells.default = pkgs.mkShell { - packages = with pkgs; [ - nodePackages.npm - nodejs - ]; - }; - }; - flake = { - }; - }; -} diff --git a/src/utils/Chores.jsx b/src/utils/Chores.jsx index b85ad4b..729a9ac 100644 --- a/src/utils/Chores.jsx +++ b/src/utils/Chores.jsx @@ -179,9 +179,9 @@ export const notInCompletionWindow = chore => { export const ChoreFilters = userProfile => ({ anyone: () => true, assigned_to_me: chore => { - return chore.assignedTo && chore.assignedTo === userProfile?.id + return chore.assignedTo && chore.assignedTo === userProfile.id }, assigned_to_others: chore => { - return chore.assignedTo && chore.assignedTo !== userProfile?.id + return chore.assignedTo && chore.assignedTo !== userProfile.id }, }) diff --git a/src/views/Authorization/LoginView.jsx b/src/views/Authorization/LoginView.jsx index bd93055..476f468 100644 --- a/src/views/Authorization/LoginView.jsx +++ b/src/views/Authorization/LoginView.jsx @@ -115,7 +115,7 @@ const LoginView = () => { Navigate('/forgot-password') } const generateRandomState = () => { - const randomState = Math.random().toString(32).substring(5) + const randomState = Math.random().toString(36).substring(7) localStorage.setItem('authState', randomState) return randomState diff --git a/src/views/Chores/MyChores.jsx b/src/views/Chores/MyChores.jsx index ae4497e..94c2fd7 100644 --- a/src/views/Chores/MyChores.jsx +++ b/src/views/Chores/MyChores.jsx @@ -74,7 +74,7 @@ const MyChores = () => { JSON.parse(localStorage.getItem('openChoreSections')) || {}, ) const [selectedChoreFilter, setSelectedChoreFilter] = useState( - localStorage.getItem('selectedChoreFilter') || 'anyone', + JSON.parse(localStorage.getItem('selectedChoreFilter')) || 'anyone', ) const [searchTerm, setSearchTerm] = useState('') const [performers, setPerformers] = useState([]) @@ -98,12 +98,13 @@ const MyChores = () => { throw new Error(userProfileResponse.statusText) } Promise.all([ - userProfileResponse.json(), choresResponse.json(), usersResponse.json(), + userProfileResponse.json(), ]).then(data => { - const [userProfileData, choresData, usersData] = data + const [choresData, usersData, userProfileData] = data setUserProfile(userProfileData.res) + choresData.res.sort(ChoreSorter) setChores(choresData.res) setFilteredChores(choresData.res) setPerformers(usersData.res) @@ -138,11 +139,7 @@ const MyChores = () => { const sortedChores = choresData.res.sort(ChoreSorter) setChores(sortedChores) setFilteredChores(sortedChores) - const sections = ChoresGrouper( - selectedChoreSection, - sortedChores, - ChoreFilters(userProfile)[selectedChoreFilter], - ) + const sections = ChoresGrouper(selectedChoreSection, sortedChores) setChoreSections(sections) if (localStorage.getItem('openChoreSections') === null) { setSelectedChoreSectionWithCache(selectedChoreSection) @@ -181,7 +178,7 @@ const MyChores = () => { } const setSelectedChoreFilterWithCache = value => { setSelectedChoreFilter(value) - localStorage.setItem('selectedChoreFilter', value) + localStorage.setItem('selectedChoreFilter', JSON.stringify(value)) } const updateChores = newChore => { @@ -189,13 +186,7 @@ const MyChores = () => { newChores.push(newChore) setChores(newChores) setFilteredChores(newChores) - setChoreSections( - ChoresGrouper( - selectedChoreSection, - newChores, - ChoreFilters(userProfile)[selectedChoreFilter], - ), - ) + setChoreSections(ChoresGrouper(selectedChoreSection, newChores)) setSearchFilter('All') } const handleMenuOutsideClick = event => { @@ -271,13 +262,7 @@ const MyChores = () => { } setChores(newChores) setFilteredChores(newFilteredChores) - setChoreSections( - ChoresGrouper( - selectedChoreSection, - newChores, - ChoreFilters(userProfile)[selectedChoreFilter], - ), - ) + setChoreSections(ChoresGrouper(selectedChoreSection, newChores)) switch (event) { case 'completed': @@ -308,13 +293,7 @@ const MyChores = () => { ) setChores(newChores) setFilteredChores(newFilteredChores) - setChoreSections( - ChoresGrouper( - selectedChoreSection, - newChores, - ChoreFilters(userProfile)[selectedChoreFilter], - ), - ) + setChoreSections(ChoresGrouper(selectedChoreSection, newChores)) } const searchOptions = { @@ -470,11 +449,7 @@ const MyChores = () => { ) }} onItemSelect={selected => { - const section = ChoresGrouper( - selected.value, - chores, - ChoreFilters(userProfile)[selectedChoreFilter], - ) + const section = ChoresGrouper(selected.value, chores) setChoreSections(section) setSelectedChoreSectionWithCache(selected.value) setOpenChoreSectionsWithCache( diff --git a/src/views/Settings/NotificationSetting.jsx b/src/views/Settings/NotificationSetting.jsx index 105260a..a5abec9 100644 --- a/src/views/Settings/NotificationSetting.jsx +++ b/src/views/Settings/NotificationSetting.jsx @@ -98,10 +98,6 @@ const NotificationSetting = () => { const [chatID, setChatID] = useState( userProfile?.notification_target?.target_id, ) - const [webhookURL, setWebhookURL] = useState( - userProfile?.notification_target?.target_id, - ) - const [error, setError] = useState('') const SaveValidation = () => { switch (notificationTarget) { @@ -120,12 +116,6 @@ const NotificationSetting = () => { return false } break - case '4': - if (webhookURL === '') { - setError('Webhook URL is required') - return false - } - break default: break } @@ -136,8 +126,7 @@ const NotificationSetting = () => { if (!SaveValidation()) return UpdateNotificationTarget({ - // 4 = Discord - target: notificationTarget === '4' ? webhookURL : chatID, + target: chatID, type: Number(notificationTarget), }).then(resp => { if (resp.status != 200) { @@ -145,26 +134,13 @@ const NotificationSetting = () => { return } - // Discord - if (notificationTarget === '4') { - setUserProfile({ - ...userProfile, - notification_target: { - target: webhookURL, - type: Number(notificationTarget), - }, - }) - } else { - // Others (Telegram) - setUserProfile({ - ...userProfile, - notification_target: { - target: chatID, - type: Number(notificationTarget), - }, - }) - } - + setUserProfile({ + ...userProfile, + notification_target: { + target: chatID, + type: Number(notificationTarget), + }, + }) alert('Notification target updated') }) } @@ -347,7 +323,7 @@ const NotificationSetting = () => { Custom Notification - Notification through other platform like Telegram or Pushover + Notificaiton through other platform like Telegram or Pushover @@ -404,7 +380,6 @@ const NotificationSetting = () => { - {notificationTarget === '1' && ( @@ -463,19 +438,6 @@ const NotificationSetting = () => { /> )} - {notificationTarget === '4' && ( - <> - Webhook URL - setWebhookURL(e.target.value)} - placeholder='Webhook URL' - sx={{ - width: '200px', - }} - /> - - )} {error && ( {error} diff --git a/src/views/components/AddTaskModal.jsx b/src/views/components/AddTaskModal.jsx index 5438fd6..99cfa68 100644 --- a/src/views/components/AddTaskModal.jsx +++ b/src/views/components/AddTaskModal.jsx @@ -430,18 +430,12 @@ const TaskInput = ({ autoFocus, onChoreUpdate }) => { assignedTo: userProfile.id, assignStrategy: 'random', isRolling: false, - notification: true, + notification: false, description: description || null, labelsV2: [], priority: priority || 0, status: 0, frequencyType: 'once', - frequencyMetadata: {}, - notificationMetadata: { - dueDate: true, - predue: true, - nagging: true - }, } if (frequency) { diff --git a/src/views/components/NavBar.jsx b/src/views/components/NavBar.jsx index 40fa01d..86f8e9c 100644 --- a/src/views/components/NavBar.jsx +++ b/src/views/components/NavBar.jsx @@ -105,12 +105,12 @@ const NavBar = () => { } return ( -