Compare commits
9 Commits
Author | SHA1 | Date |
---|---|---|
jude | 9d452ed8cb | |
jude | 441419b92b | |
jude | aecf2c15be | |
jude | 79da56c794 | |
jude | ef10902c1e | |
jude | c277f85c2a | |
jude | 035653c7fa | |
jude | 6358bc3deb | |
jude | 9f5066f982 |
|
@ -2502,7 +2502,7 @@ checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
|
|||
|
||||
[[package]]
|
||||
name = "reminder-rs"
|
||||
version = "1.7.13"
|
||||
version = "1.7.17"
|
||||
dependencies = [
|
||||
"axum",
|
||||
"base64 0.22.0",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "reminder-rs"
|
||||
version = "1.7.13"
|
||||
version = "1.7.17"
|
||||
authors = ["Jude Southworth <judesouthworth@pm.me>"]
|
||||
edition = "2021"
|
||||
license = "AGPL-3.0 only"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -17,7 +17,7 @@ export const Mentions = ({ input }) => {
|
|||
{
|
||||
trigger: "@",
|
||||
values: (roles || [])
|
||||
.filter((role) => role.name === "@everyone")
|
||||
.filter((role) => role.name !== "@everyone")
|
||||
.map(({ id, name }) => ({ key: name, value: id })),
|
||||
allowSpaces: true,
|
||||
selectTemplate: (item) => `<@&${item.original.value}>`,
|
||||
|
|
|
@ -10,7 +10,6 @@ import { useQuery } from "react-query";
|
|||
import "./styles.scss";
|
||||
import { useGuild } from "../App/useGuild";
|
||||
import { DEFAULT_COLOR } from "./Embed";
|
||||
import { useTimezone } from "../App/TimezoneProvider";
|
||||
|
||||
function defaultReminder(): Reminder {
|
||||
return {
|
||||
|
|
|
@ -16,28 +16,28 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
const ref = useRef(null);
|
||||
|
||||
const [timezone] = useTimezone();
|
||||
const [time, setTime] = useState(
|
||||
defaultValue ? DateTime.fromISO(defaultValue, { zone: "UTC" }) : null,
|
||||
const [localTime, setLocalTime] = useState(
|
||||
defaultValue ? DateTime.fromISO(defaultValue, { zone: "UTC" }).setZone(timezone) : null,
|
||||
);
|
||||
|
||||
const updateTime = useCallback(
|
||||
(upd: TimeUpdate) => {
|
||||
if (upd === null) {
|
||||
setTime(null);
|
||||
setLocalTime(null);
|
||||
}
|
||||
|
||||
let newTime = time;
|
||||
let newTime = localTime;
|
||||
if (newTime === null) {
|
||||
newTime = DateTime.now().setZone("UTC");
|
||||
newTime = DateTime.now().setZone(timezone);
|
||||
}
|
||||
setTime(newTime.setZone(timezone).set(upd).setZone("UTC"));
|
||||
setLocalTime(newTime.set(upd));
|
||||
},
|
||||
[time, timezone],
|
||||
[localTime, timezone],
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
onInput(time?.setZone("UTC").toFormat("yyyy-LL-dd'T'HH:mm:ss"));
|
||||
}, [time]);
|
||||
onInput(localTime?.setZone("UTC").toFormat("yyyy-LL-dd'T'HH:mm:ss"));
|
||||
}, [localTime]);
|
||||
|
||||
const flash = useFlash();
|
||||
|
||||
|
@ -51,14 +51,14 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
let dt = DateTime.fromISO(pasteValue, { zone: timezone });
|
||||
|
||||
if (dt.isValid) {
|
||||
setTime(dt);
|
||||
setLocalTime(dt);
|
||||
return;
|
||||
}
|
||||
|
||||
dt = DateTime.fromSQL(pasteValue);
|
||||
|
||||
if (dt.isValid) {
|
||||
setTime(dt);
|
||||
setLocalTime(dt);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -83,8 +83,8 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
maxlength={4}
|
||||
placeholder="YYYY"
|
||||
value={
|
||||
time
|
||||
? time.setZone(timezone).year.toLocaleString("en-US", {
|
||||
localTime
|
||||
? localTime.year.toLocaleString("en-US", {
|
||||
minimumIntegerDigits: 4,
|
||||
useGrouping: false,
|
||||
})
|
||||
|
@ -114,8 +114,8 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
maxlength={2}
|
||||
placeholder="MM"
|
||||
value={
|
||||
time
|
||||
? time.setZone(timezone).month.toLocaleString("en-US", {
|
||||
localTime
|
||||
? localTime.month.toLocaleString("en-US", {
|
||||
minimumIntegerDigits: 2,
|
||||
})
|
||||
: ""
|
||||
|
@ -144,10 +144,10 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
maxlength={2}
|
||||
placeholder="DD"
|
||||
value={
|
||||
time
|
||||
? time
|
||||
.setZone(timezone)
|
||||
.day.toLocaleString("en-US", { minimumIntegerDigits: 2 })
|
||||
localTime
|
||||
? localTime.day.toLocaleString("en-US", {
|
||||
minimumIntegerDigits: 2,
|
||||
})
|
||||
: ""
|
||||
}
|
||||
onBlur={(ev) => {
|
||||
|
@ -173,10 +173,10 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
maxlength={2}
|
||||
placeholder="hh"
|
||||
value={
|
||||
time
|
||||
? time
|
||||
.setZone(timezone)
|
||||
.hour.toLocaleString("en-US", { minimumIntegerDigits: 2 })
|
||||
localTime
|
||||
? localTime.hour.toLocaleString("en-US", {
|
||||
minimumIntegerDigits: 2,
|
||||
})
|
||||
: ""
|
||||
}
|
||||
onBlur={(ev) => {
|
||||
|
@ -203,8 +203,8 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
maxlength={2}
|
||||
placeholder="mm"
|
||||
value={
|
||||
time
|
||||
? time.setZone(timezone).minute.toLocaleString("en-US", {
|
||||
localTime
|
||||
? localTime.minute.toLocaleString("en-US", {
|
||||
minimumIntegerDigits: 2,
|
||||
})
|
||||
: ""
|
||||
|
@ -233,8 +233,8 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
maxlength={2}
|
||||
placeholder="ss"
|
||||
value={
|
||||
time
|
||||
? time.setZone(timezone).second.toLocaleString("en-US", {
|
||||
localTime
|
||||
? localTime.second.toLocaleString("en-US", {
|
||||
minimumIntegerDigits: 2,
|
||||
})
|
||||
: ""
|
||||
|
@ -276,15 +276,17 @@ export const TimeInput = ({ defaultValue, onInput }) => {
|
|||
type="datetime-local"
|
||||
step="1"
|
||||
value={
|
||||
time
|
||||
? time.toFormat("yyyy-LL-dd'T'HH:mm:ss")
|
||||
: DateTime.now().toFormat("yyyy-LL-dd'T'HH:mm:ss")
|
||||
localTime
|
||||
? localTime.toFormat("yyyy-LL-dd'T'HH:mm:ss")
|
||||
: DateTime.now().setZone(timezone).toFormat("yyyy-LL-dd'T'HH:mm:ss")
|
||||
}
|
||||
ref={ref}
|
||||
onInput={(ev) => {
|
||||
ev.currentTarget.value === ""
|
||||
? updateTime(null)
|
||||
: setTime(DateTime.fromISO(ev.currentTarget.value, { zone: "UTC" }));
|
||||
: setLocalTime(
|
||||
DateTime.fromISO(ev.currentTarget.value, { zone: timezone }),
|
||||
);
|
||||
}}
|
||||
></input>
|
||||
</>
|
||||
|
|
|
@ -86,36 +86,6 @@ const TimezoneModal = ({ setModalOpen }) => {
|
|||
</p>
|
||||
<br></br>
|
||||
<div class="has-text-centered">
|
||||
<button
|
||||
class="button is-success"
|
||||
style={{
|
||||
margin: "2px",
|
||||
}}
|
||||
id="set-browser-timezone"
|
||||
onClick={() => {
|
||||
setSelectedZone(browserTimezone);
|
||||
}}
|
||||
>
|
||||
<span>Use Browser Timezone</span>{" "}
|
||||
<span class="icon">
|
||||
<i class="fab fa-firefox-browser"></i>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
class="button is-success"
|
||||
id="set-bot-timezone"
|
||||
style={{
|
||||
margin: "2px",
|
||||
}}
|
||||
onClick={() => {
|
||||
setSelectedZone(data.timezone);
|
||||
}}
|
||||
>
|
||||
<span>Use Bot Timezone</span>{" "}
|
||||
<span class="icon">
|
||||
<i class="fab fa-discord"></i>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
class="button is-success is-outlined"
|
||||
id="update-bot-timezone"
|
||||
|
|
|
@ -282,21 +282,52 @@ impl ComponentDataModel {
|
|||
.await
|
||||
.unwrap();
|
||||
|
||||
let values = sqlx::query!(
|
||||
// fucking braindead mysql use <=> instead of = for null comparison
|
||||
"
|
||||
SELECT id, value FROM todos WHERE user_id <=> ? AND channel_id <=> ? AND guild_id <=> ?
|
||||
let values = if let Some(uid) = selector.user_id {
|
||||
sqlx::query!(
|
||||
"
|
||||
SELECT todos.id, value FROM todos
|
||||
INNER JOIN users ON todos.user_id = users.id
|
||||
WHERE users.user = ?
|
||||
",
|
||||
selector.user_id,
|
||||
selector.channel_id,
|
||||
selector.guild_id,
|
||||
)
|
||||
.fetch_all(&data.database)
|
||||
.await
|
||||
.unwrap()
|
||||
.iter()
|
||||
.map(|row| (row.id as usize, row.value.clone()))
|
||||
.collect::<Vec<(usize, String)>>();
|
||||
uid,
|
||||
)
|
||||
.fetch_all(&data.database)
|
||||
.await
|
||||
.unwrap()
|
||||
.iter()
|
||||
.map(|row| (row.id as usize, row.value.clone()))
|
||||
.collect::<Vec<(usize, String)>>()
|
||||
} else if let Some(cid) = selector.channel_id {
|
||||
sqlx::query!(
|
||||
"
|
||||
SELECT todos.id, value FROM todos
|
||||
INNER JOIN channels ON todos.channel_id = channels.id
|
||||
WHERE channels.channel = ?
|
||||
",
|
||||
cid,
|
||||
)
|
||||
.fetch_all(&data.database)
|
||||
.await
|
||||
.unwrap()
|
||||
.iter()
|
||||
.map(|row| (row.id as usize, row.value.clone()))
|
||||
.collect::<Vec<(usize, String)>>()
|
||||
} else {
|
||||
sqlx::query!(
|
||||
"
|
||||
SELECT todos.id, value FROM todos
|
||||
INNER JOIN guilds ON todos.guild_id = guilds.id
|
||||
WHERE guilds.guild = ?
|
||||
",
|
||||
selector.guild_id,
|
||||
)
|
||||
.fetch_all(&data.database)
|
||||
.await
|
||||
.unwrap()
|
||||
.iter()
|
||||
.map(|row| (row.id as usize, row.value.clone()))
|
||||
.collect::<Vec<(usize, String)>>()
|
||||
};
|
||||
|
||||
let resp = show_todo_page(
|
||||
&values,
|
||||
|
|
Loading…
Reference in New Issue