Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 65 additions & 2 deletions frontend/src/components/Settings/SettingsTab.vue
Original file line number Diff line number Diff line change
@@ -1,10 +1,73 @@
<template>
<div class="flex min-h-0 flex-col">
<h2 class="text-xl font-semibold text-ink-gray-9">Settings</h2>
<div class="mt-6 divide-y overflow-y-auto pb-16">

<div class="mt-6 divide-y overflow-y-auto pb-2">
<a href="/update-password">
<Button variant="solid"> Update Password </Button>
<Button variant="solid">
Update Password
</Button>
</a>
</div>
<hr class="my-4 border-0 border-t border-outline-gray-4" />

<div class="mt-2">
<h3 class="text-lg font-semibold text-ink-gray-9">Notifications</h3>

<div class="mt-3 flex items-center justify-between gap-4">
<div>
<p class="text-sm font-medium text-ink-gray-8">Inactivity digest</p>
<p class="mt-1 text-sm text-ink-gray-5">
Email me a catch-up summary when I have been inactive for 7 days.
</p>
</div>

<Switch
class="shrink-0"
size="sm"
v-model="weeklyDigest"
:disabled="updateWeeklyDigest.loading"
@update:model-value="saveWeeklyDigest"
/>
</div>
</div>
</div>
</template>

<script setup lang="ts">
import { ref, watch } from 'vue'
import { Switch, useCall } from 'frappe-ui'
import { useSessionUser } from '@/data/users'

const sessionUser = useSessionUser()
const weeklyDigest = ref(false)
const savedWeeklyDigest = ref(false)
let previousWeeklyDigest = false

const updateWeeklyDigest = useCall<boolean, { weekly_digest: boolean }>({
url: '/api/v2/method/gameplan.api.update_weekly_digest',
method: 'POST',
immediate: false,
onSuccess(value) {
sessionUser.weekly_digest = Boolean(value)
savedWeeklyDigest.value = Boolean(value)
},
onError() {
weeklyDigest.value = previousWeeklyDigest
},
})

watch(
() => sessionUser.weekly_digest,
(value) => {
savedWeeklyDigest.value = Boolean(value)
weeklyDigest.value = savedWeeklyDigest.value
},
{ immediate: true },
)

function saveWeeklyDigest(value: boolean) {
previousWeeklyDigest = savedWeeklyDigest.value
updateWeeklyDigest.submit({ weekly_digest: value })
}
</script>
2 changes: 2 additions & 0 deletions frontend/src/data/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ interface UserInfo {
user_image: string
full_name: string
user_type: string
weekly_digest: boolean
user_profile: string
image_background_color: string
is_image_background_removed: number
Expand Down Expand Up @@ -62,6 +63,7 @@ function getPlaceholderUser(email: string, full_name: string) {
email: email,
full_name: full_name,
user_image: '',
weekly_digest: false,
role: 'Gameplan Member',
enabled: 1,
user_profile: '',
Expand Down
20 changes: 19 additions & 1 deletion gameplan/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,15 @@ def get_user_info(user=None):
users = frappe.qb.get_query(
"User",
filters=filters,
fields=["name", "email", "enabled", "user_image", "full_name", "user_type"],
fields=[
"name",
"email",
"enabled",
"user_image",
"full_name",
"user_type",
"weekly_digest",
],
order_by="full_name asc",
distinct=True,
).run(as_dict=1)
Expand Down Expand Up @@ -79,6 +87,16 @@ def get_user_info(user=None):
return users


@frappe.whitelist()
@validate_type
def update_weekly_digest(weekly_digest: bool):
if frappe.session.user == "Guest":
frappe.throw("Authentication failed", exc=frappe.AuthenticationError)

frappe.db.set_value("User", frappe.session.user, "weekly_digest", weekly_digest)
return weekly_digest


@frappe.whitelist()
@validate_type
def change_user_role(user: str, role: str):
Expand Down
31 changes: 31 additions & 0 deletions gameplan/demo/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,37 @@ def generate_users_data():
"years_experience": random.randint(1, 15),
}

narayan ={
"email": "narayan.gawas@spit.ac.in",
"first_name": "Narayan",
"last_name": "Gawas",
"avatar_url": avatar_url,
"department": department,
"job_title": job_title,
"bio": bio,
"readme": readme_content,
"location": random.choice(
[
"San Francisco, CA",
"New York, NY",
"Austin, TX",
"Seattle, WA",
"Boston, MA",
"London, UK",
"Berlin, Germany",
"Toronto, Canada",
"Remote",
"Amsterdam, Netherlands",
"Barcelona, Spain",
"Sydney, Australia",
]
),
"years_experience": random.randint(1, 15),

}

users.append(user)
users.append(narayan)

return users

Expand Down Expand Up @@ -279,6 +309,7 @@ def create_user_and_profile(user_data):
"last_name": user_data["last_name"],
"user_image": user_data.get("avatar_url"),
"send_welcome_email": 0,
"new_password": "Test@123",
"user_type": "System User",
"roles": [{"role": "Gameplan Member"}],
}
Expand Down
Loading