feat: discord notifications & notify by default
This commit is contained in:
parent
36faaf0b97
commit
5bb5c8a907
7 changed files with 164 additions and 14 deletions
19
.direnv/bin/nix-direnv-reload
Executable file
19
.direnv/bin/nix-direnv-reload
Executable file
|
@ -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
|
1
.envrc
Normal file
1
.envrc
Normal file
|
@ -0,0 +1 @@
|
|||
use flake
|
61
flake.lock
generated
Normal file
61
flake.lock
generated
Normal file
|
@ -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
|
||||
}
|
23
flake.nix
Normal file
23
flake.nix
Normal file
|
@ -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 = {
|
||||
};
|
||||
};
|
||||
}
|
|
@ -85,10 +85,14 @@ const ChoreEdit = () => {
|
|||
const [thingTrigger, setThingTrigger] = useState(null)
|
||||
const [isThingValid, setIsThingValid] = useState(false)
|
||||
|
||||
const [notificationMetadata, setNotificationMetadata] = useState({})
|
||||
const [notificationMetadata, setNotificationMetadata] = useState({
|
||||
dueDate: true,
|
||||
predue: true,
|
||||
nagging: true
|
||||
})
|
||||
|
||||
const [isRolling, setIsRolling] = useState(false)
|
||||
const [isNotificable, setIsNotificable] = useState(false)
|
||||
const [isNotificable, setIsNotificable] = useState(true)
|
||||
const [isActive, setIsActive] = useState(true)
|
||||
const [updatedBy, setUpdatedBy] = useState(0)
|
||||
const [createdBy, setCreatedBy] = useState(0)
|
||||
|
@ -710,7 +714,7 @@ const ChoreEdit = () => {
|
|||
onChange={e => {
|
||||
setIsNotificable(e.target.checked)
|
||||
}}
|
||||
defaultChecked={isNotificable}
|
||||
defaultChecked={true}
|
||||
checked={isNotificable}
|
||||
value={isNotificable}
|
||||
disabled={!isPlusAccount(userProfile)}
|
||||
|
|
|
@ -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 = () => {
|
|||
<Typography level='h3'>Custom Notification</Typography>
|
||||
<Divider />
|
||||
<Typography level='body-md'>
|
||||
Notificaiton through other platform like Telegram or Pushover
|
||||
Notification through other platform like Telegram or Pushover
|
||||
</Typography>
|
||||
|
||||
<FormControl orientation='horizontal'>
|
||||
|
@ -380,6 +404,7 @@ const NotificationSetting = () => {
|
|||
<Option value='0'>None</Option>
|
||||
<Option value='1'>Telegram</Option>
|
||||
<Option value='2'>Pushover</Option>
|
||||
<Option value='4'>Discord</Option>
|
||||
<Option value='3'>Webhooks</Option>
|
||||
</Select>
|
||||
{notificationTarget === '1' && (
|
||||
|
@ -438,6 +463,19 @@ const NotificationSetting = () => {
|
|||
/>
|
||||
</>
|
||||
)}
|
||||
{notificationTarget === '4' && (
|
||||
<>
|
||||
<Typography level='body-sm'>Webhook URL</Typography>
|
||||
<Input
|
||||
value={webhookURL}
|
||||
onChange={e => setWebhookURL(e.target.value)}
|
||||
placeholder='Webhook URL'
|
||||
sx={{
|
||||
width: '200px',
|
||||
}}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
{error && (
|
||||
<Typography color='warning' level='body-sm'>
|
||||
{error}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue