Compare commits
2 commits
4dfddbcfb0
...
59d794a6d0
Author | SHA1 | Date | |
---|---|---|---|
59d794a6d0 | |||
5bb5c8a907 |
8 changed files with 166 additions and 16 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
|
2
.env
2
.env
|
@ -1,4 +1,4 @@
|
||||||
VITE_APP_API_URL=http://localhost:2021
|
VITE_APP_API_URL=
|
||||||
VITE_IS_LANDING_DEFAULT=false
|
VITE_IS_LANDING_DEFAULT=false
|
||||||
VITE_OPENREPLAY_PROJECT_KEY=
|
VITE_OPENREPLAY_PROJECT_KEY=
|
||||||
VITE_IS_SELF_HOSTED=false
|
VITE_IS_SELF_HOSTED=false
|
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 [thingTrigger, setThingTrigger] = useState(null)
|
||||||
const [isThingValid, setIsThingValid] = useState(false)
|
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 [isRolling, setIsRolling] = useState(false)
|
||||||
const [isNotificable, setIsNotificable] = useState(false)
|
const [isNotificable, setIsNotificable] = useState(true)
|
||||||
const [isActive, setIsActive] = useState(true)
|
const [isActive, setIsActive] = useState(true)
|
||||||
const [updatedBy, setUpdatedBy] = useState(0)
|
const [updatedBy, setUpdatedBy] = useState(0)
|
||||||
const [createdBy, setCreatedBy] = useState(0)
|
const [createdBy, setCreatedBy] = useState(0)
|
||||||
|
@ -710,7 +714,7 @@ const ChoreEdit = () => {
|
||||||
onChange={e => {
|
onChange={e => {
|
||||||
setIsNotificable(e.target.checked)
|
setIsNotificable(e.target.checked)
|
||||||
}}
|
}}
|
||||||
defaultChecked={isNotificable}
|
defaultChecked={true}
|
||||||
checked={isNotificable}
|
checked={isNotificable}
|
||||||
value={isNotificable}
|
value={isNotificable}
|
||||||
disabled={!isPlusAccount(userProfile)}
|
disabled={!isPlusAccount(userProfile)}
|
||||||
|
|
|
@ -98,6 +98,10 @@ const NotificationSetting = () => {
|
||||||
const [chatID, setChatID] = useState(
|
const [chatID, setChatID] = useState(
|
||||||
userProfile?.notification_target?.target_id,
|
userProfile?.notification_target?.target_id,
|
||||||
)
|
)
|
||||||
|
const [webhookURL, setWebhookURL] = useState(
|
||||||
|
userProfile?.notification_target?.target_id,
|
||||||
|
)
|
||||||
|
|
||||||
const [error, setError] = useState('')
|
const [error, setError] = useState('')
|
||||||
const SaveValidation = () => {
|
const SaveValidation = () => {
|
||||||
switch (notificationTarget) {
|
switch (notificationTarget) {
|
||||||
|
@ -116,6 +120,12 @@ const NotificationSetting = () => {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
|
case '4':
|
||||||
|
if (webhookURL === '') {
|
||||||
|
setError('Webhook URL is required')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
break
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -126,7 +136,8 @@ const NotificationSetting = () => {
|
||||||
if (!SaveValidation()) return
|
if (!SaveValidation()) return
|
||||||
|
|
||||||
UpdateNotificationTarget({
|
UpdateNotificationTarget({
|
||||||
target: chatID,
|
// 4 = Discord
|
||||||
|
target: notificationTarget === '4' ? webhookURL : chatID,
|
||||||
type: Number(notificationTarget),
|
type: Number(notificationTarget),
|
||||||
}).then(resp => {
|
}).then(resp => {
|
||||||
if (resp.status != 200) {
|
if (resp.status != 200) {
|
||||||
|
@ -134,13 +145,26 @@ const NotificationSetting = () => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
setUserProfile({
|
// Discord
|
||||||
...userProfile,
|
if (notificationTarget === '4') {
|
||||||
notification_target: {
|
setUserProfile({
|
||||||
target: chatID,
|
...userProfile,
|
||||||
type: Number(notificationTarget),
|
notification_target: {
|
||||||
},
|
target: webhookURL,
|
||||||
})
|
type: Number(notificationTarget),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// Others (Telegram)
|
||||||
|
setUserProfile({
|
||||||
|
...userProfile,
|
||||||
|
notification_target: {
|
||||||
|
target: chatID,
|
||||||
|
type: Number(notificationTarget),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
alert('Notification target updated')
|
alert('Notification target updated')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -323,7 +347,7 @@ const NotificationSetting = () => {
|
||||||
<Typography level='h3'>Custom Notification</Typography>
|
<Typography level='h3'>Custom Notification</Typography>
|
||||||
<Divider />
|
<Divider />
|
||||||
<Typography level='body-md'>
|
<Typography level='body-md'>
|
||||||
Notificaiton through other platform like Telegram or Pushover
|
Notification through other platform like Telegram or Pushover
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
<FormControl orientation='horizontal'>
|
<FormControl orientation='horizontal'>
|
||||||
|
@ -380,6 +404,7 @@ const NotificationSetting = () => {
|
||||||
<Option value='0'>None</Option>
|
<Option value='0'>None</Option>
|
||||||
<Option value='1'>Telegram</Option>
|
<Option value='1'>Telegram</Option>
|
||||||
<Option value='2'>Pushover</Option>
|
<Option value='2'>Pushover</Option>
|
||||||
|
<Option value='4'>Discord</Option>
|
||||||
<Option value='3'>Webhooks</Option>
|
<Option value='3'>Webhooks</Option>
|
||||||
</Select>
|
</Select>
|
||||||
{notificationTarget === '1' && (
|
{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 && (
|
{error && (
|
||||||
<Typography color='warning' level='body-sm'>
|
<Typography color='warning' level='body-sm'>
|
||||||
{error}
|
{error}
|
||||||
|
|
|
@ -430,14 +430,18 @@ const TaskInput = ({ autoFocus, onChoreUpdate }) => {
|
||||||
assignedTo: userProfile.id,
|
assignedTo: userProfile.id,
|
||||||
assignStrategy: 'random',
|
assignStrategy: 'random',
|
||||||
isRolling: false,
|
isRolling: false,
|
||||||
notification: false,
|
notification: true,
|
||||||
description: description || null,
|
description: description || null,
|
||||||
labelsV2: [],
|
labelsV2: [],
|
||||||
priority: priority || 0,
|
priority: priority || 0,
|
||||||
status: 0,
|
status: 0,
|
||||||
frequencyType: 'once',
|
frequencyType: 'once',
|
||||||
frequencyMetadata: {},
|
frequencyMetadata: {},
|
||||||
notificationMetadata: {},
|
notificationMetadata: {
|
||||||
|
dueDate: true,
|
||||||
|
predue: true,
|
||||||
|
nagging: true
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frequency) {
|
if (frequency) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue