diff --git a/.direnv/bin/nix-direnv-reload b/.direnv/bin/nix-direnv-reload
new file mode 100755
index 0000000..d07ca27
--- /dev/null
+++ b/.direnv/bin/nix-direnv-reload
@@ -0,0 +1,19 @@
+#!/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
new file mode 100644
index 0000000..3550a30
--- /dev/null
+++ b/.envrc
@@ -0,0 +1 @@
+use flake
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..d28337e
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,61 @@
+{
+ "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
new file mode 100644
index 0000000..1ecdaaa
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,23 @@
+{
+ 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/views/Settings/NotificationSetting.jsx b/src/views/Settings/NotificationSetting.jsx
index a5abec9..105260a 100644
--- a/src/views/Settings/NotificationSetting.jsx
+++ b/src/views/Settings/NotificationSetting.jsx
@@ -98,6 +98,10 @@ 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) {
@@ -116,6 +120,12 @@ const NotificationSetting = () => {
return false
}
break
+ case '4':
+ if (webhookURL === '') {
+ setError('Webhook URL is required')
+ return false
+ }
+ break
default:
break
}
@@ -126,7 +136,8 @@ const NotificationSetting = () => {
if (!SaveValidation()) return
UpdateNotificationTarget({
- target: chatID,
+ // 4 = Discord
+ target: notificationTarget === '4' ? webhookURL : chatID,
type: Number(notificationTarget),
}).then(resp => {
if (resp.status != 200) {
@@ -134,13 +145,26 @@ const NotificationSetting = () => {
return
}
- setUserProfile({
- ...userProfile,
- notification_target: {
- target: chatID,
- type: Number(notificationTarget),
- },
- })
+ // 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),
+ },
+ })
+ }
+
alert('Notification target updated')
})
}
@@ -323,7 +347,7 @@ const NotificationSetting = () => {
Custom Notification
- Notificaiton through other platform like Telegram or Pushover
+ Notification through other platform like Telegram or Pushover
@@ -380,6 +404,7 @@ const NotificationSetting = () => {
+
{notificationTarget === '1' && (
@@ -438,6 +463,19 @@ 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 9621094..5438fd6 100644
--- a/src/views/components/AddTaskModal.jsx
+++ b/src/views/components/AddTaskModal.jsx
@@ -430,14 +430,18 @@ const TaskInput = ({ autoFocus, onChoreUpdate }) => {
assignedTo: userProfile.id,
assignStrategy: 'random',
isRolling: false,
- notification: false,
+ notification: true,
description: description || null,
labelsV2: [],
priority: priority || 0,
status: 0,
frequencyType: 'once',
frequencyMetadata: {},
- notificationMetadata: {},
+ notificationMetadata: {
+ dueDate: true,
+ predue: true,
+ nagging: true
+ },
}
if (frequency) {