diff --git a/__pycache__/dashboard.cpython-312.pyc b/__pycache__/dashboard.cpython-312.pyc index e4faaa3..e0cca1f 100644 Binary files a/__pycache__/dashboard.cpython-312.pyc and b/__pycache__/dashboard.cpython-312.pyc differ diff --git a/__pycache__/theme.cpython-312.pyc b/__pycache__/theme.cpython-312.pyc index 151c728..6114ec3 100644 Binary files a/__pycache__/theme.cpython-312.pyc and b/__pycache__/theme.cpython-312.pyc differ diff --git a/__pycache__/utils.cpython-312.pyc b/__pycache__/utils.cpython-312.pyc index 60ada26..09dfa11 100644 Binary files a/__pycache__/utils.cpython-312.pyc and b/__pycache__/utils.cpython-312.pyc differ diff --git a/dashboard (conflicted copy 2024-10-07 175852).py b/dashboard (conflicted copy 2024-10-07 175852).py deleted file mode 100644 index c9138fe..0000000 --- a/dashboard (conflicted copy 2024-10-07 175852).py +++ /dev/null @@ -1,28 +0,0 @@ -import theme -from nicegui import ui -from main import checked_data -import data -from utils import Utils - -print(theme.tnt) - -@ui.page('/dashboard') -def dashboard(): - with theme.frame('Dashboard'): - pass - - with ui.grid().style('grid-template-columns: repeat(2, minmax(1px, 1fr));'): - peoples = Utils.get_unique_people() - for ppl in peoples: - pl = ''.join(ppl) - card_info = Utils.get_persons_incomplete(pl) - for item in card_info: - vcard = ui.label(item[1]).classes('hidden') - pcard = ui.label(item[2]).classes('hidden') - club = ui.label(item[3]).classes('hidden') - clubcolor = ui.label(f'{theme.club.text}') - with ui.card().classes('grid justify-items-center').style(f'border: 2px solid {clubcolor.text}'): - ui.label(pl).classes('absolute top-0 left-0 font-thin text-sm') - ui.label(vcard.text).classes('text-center') - ui.label(pcard.text).classes('font-bold') - diff --git a/dashboard.py b/dashboard.py index 9d0bde9..8da6cbe 100644 --- a/dashboard.py +++ b/dashboard.py @@ -1,26 +1,36 @@ import theme from nicegui import ui -import data from utils import Utils +import random -color = {'tnt': theme.tnt, 'cubbies': theme.cubbies, 'sparks': theme.sparks} +color = {"tnt": theme.tnt, "cubbies": theme.cubbies, "sparks": theme.sparks} -@ui.page('/dashboard') +@ui.page("/dashboard", dark=False) def dashboard(): - with theme.frame('Dashboard'): + random_order = [] + with theme.frame("Dashboard"): pass - with ui.grid().style('grid-template-columns: repeat(2, minmax(1px, 1fr));'): + # with ui.grid().style('grid-template-columns: repeat(2, minmax(1px, 1fr));'): + # with ui.grid().classes('grid-flow-row-dense grid-flow-col-dense grid-cols-auto grid-rows-5').style('height: 90vh; width: 100%;'): + with ui.grid().classes("flex flex-row gap-x-2 flex-wrap").style( + "height: 80vh; width: 100%;" + ): peoples = Utils.get_unique_people() for ppl in peoples: - pl = ''.join(ppl) + pl = "".join(ppl) card_info = Utils.get_persons_incomplete(pl) - for item in card_info: - vcard = ui.label(item[1]).classes('hidden') - pcard = ui.label(item[2]).classes('hidden') - club = ui.label(item[3]).classes('hidden') - with ui.card().classes('grid justify-items-center').style(f'border: 2px solid {color[club.text.lower()]}'): - ui.label(pl).classes('absolute top-0 left-0 font-thin text-sm') - ui.label(vcard.text).classes('text-center') - ui.label(pcard.text).classes('font-bold') + random_order = random_order + card_info + random.shuffle(random_order) + for item in random_order: + pl = ui.label(item[0]).classes("hidden") + vcard = ui.label(item[1]).classes("hidden") + pcard = ui.label(item[2]).classes("hidden") + club = ui.label(item[3]).classes("hidden") + with ui.card().classes("grid justify-items-center").style( + f"border: 2px solid {color[club.text.lower()]}" + ): + ui.label(pl.text).classes("absolute top-4 left-3 font-thin text-sm") + ui.label(vcard.text).classes("text-center font-mono") + ui.label(pcard.text).classes("font-light text-lg font-sans text-wrap break-words")#.style('font-family: "Liberation Mono"') diff --git a/main.py b/main.py index 3de60eb..f94468b 100644 --- a/main.py +++ b/main.py @@ -1,19 +1,18 @@ import data import dashboard -from nicegui import app, ui +from nicegui import ui import re import requests import theme from utils import Utils -# DB columns tasks(person, verse, verse_passage, status, awana_completed, awana_bonus) +# DB columns tasks(person, verse, verse_passage, status, awana_completed, awana_bonus, spark ) db = data.CON cur = db.cursor() APIKEY = "Token f562cf2d890151d682065696dacdc0f86938a18e" HEADERS = {"Authorization": APIKEY} - -@ui.page("/") +@ui.page("/", dark=False) def index_page() -> None: with theme.frame("Homepage"): firstload = Utils.get_unique_people() @@ -36,14 +35,15 @@ def index_page() -> None: pass with ui.dialog() as addchild, ui.card().classes("items-center"): - result = ui.input(label="Clubber's Name") + result1 = ui.input(label="Clubber's Name") + result2 = ui.input(label="Awana Club") ui.button().props("push glossy icon=add_circle color=secondary").on( - "click", lambda: add_child(result) + "click", lambda: add_person(result1, result2) ) with ui.grid(columns=1).classes( "self-center justify-items-center content-center p-2 m-2 rounded-xl" - ): + ) as pplrow: users = Utils.get_unique_people() for ppl in users: pers = str(ppl)[2:-3].title() @@ -69,7 +69,6 @@ def index_page() -> None: pass showperson.set_visibility(False) - # FEAT: Allow editing of the verse. Awana will sometimes only give the student part of a verse (i.e 1 John 4:14 is actually 14b). @ui.refreshable def show_person(person): @@ -92,7 +91,7 @@ def index_page() -> None: setcolor = "rgba(255, 0, 0, .5)" else: setcolor = "rgba(0, 0, 255, .5)" - with showperson.classes(f"border-8").style( + with showperson.classes("border-8").style( f"border: {setcolor} 1px solid;" ): with ui.grid(columns=5).classes( @@ -103,10 +102,10 @@ def index_page() -> None: label_verse = ui.label(text=item[0]).classes("hidden") label_passage = ui.label(text=item[1]).classes("hidden") label_status = ui.label(text=item[2]).classes("hidden") + verssage = ui.label(text=f"{label_verse.text} - {label_passage.text}").classes("hidden") ui.label(label_verse.text).classes("font-bold text-center") with ui.row(): ui.label(label_passage.text).classes("text-wrap") - # ui.chip("Edit Verse", selectable=True, icon="edit", color="white", on_selection_change=lambda label_verse=label_verse: edit_verse(label_verse.text, person, label_passage.text)) if label_status.text == "1": ui.chip( "Complete", @@ -134,8 +133,8 @@ def index_page() -> None: selectable=True, icon="edit", color="cubbies", - on_selection_change=lambda label_passage=label_passage: edit_verse( - label_verse.text, person, label_passage.text + on_selection_change=lambda verssage=verssage: edit_verse( + verssage, person ), ).classes("text-white") ui.chip( @@ -153,17 +152,30 @@ def index_page() -> None: showperson.clear() addverse.close() - def edit_verse(verse, person, passage): + def remove_verse(): + pass + + def edit_verse(verssage, person): + editverse.clear() editverse.open() + verse = verssage.text.split('-')[0].strip() + passage = verssage.text.split('-')[1] with editverse: with ui.card().classes("flex-wrap items-center"): ui.label("Here's the verse for easier copy & paste:") - ui.label(passage) - editing = ui.textarea(label="Edit below") + ui.label(passage).classes('text-center') + ui.label(verse) + editing = ui.textarea(label="Edit below").classes('center') with ui.row().classes("justify-content-center"): ui.button().props("push glossy icon=add_circle color=secondary").on( "click", lambda: edit_submit_verse(person, editing, verse) ) + ui.button().props("push glossy icon=cancel color=sparks").on('click', lambda: editverse.close()) + + def edit_submit_verse(person, passage, verse): + Utils.edit_verse(person, verse, passage) + editverse.close() + show_person(person) def add_verse(person): if person.value is None: @@ -176,19 +188,11 @@ def index_page() -> None: with ui.row().classes("justify-content-center"): ui.button().props( "push glossy icon=add_circle color=secondary" - ).on("click", lambda: submit_verse(result, person)) + ).on("click", lambda: (submit_verse(result, person), addverse.close())) ui.button().props("push glossy icon=cancel color=negative").on( "click", lambda: addverse.close() ) - def edit_submit_verse(person, passage, verse): - print(passage) - print(passage.value) - Utils.edit_verse(person, verse, passage) - editverse.close() - show_person(person) - - def submit_verse(result, person): # Check if Verse is already in db @@ -243,24 +247,18 @@ def index_page() -> None: else: ui.notify("Uh oh. Something went wrong.") - ins = cur.execute( - f"replace into tasks values('{person.value.lower()}', '{result.value}', '{zpassage}', 0, 0, 'none');" - ) - db.commit() + Utils.add_verse(person, result, zpassage) show_person(person) - def add_child(person): + def add_person(person, club): check_person = Utils.get_specific_person(person) - print(check_person) if check_person == []: - Utils.add_person(person) - # persontoggle.set_visibility(False) - show_person(person) + Utils.add_person(person, club) addchild.close() else: ui.notify( f"The name {person.value} already exists. Please add someone else" ) - + show_person(person) ui.run(storage_secret="b601785a-855c-41d1-adeb-68f0330d8186") diff --git a/memorization_tasks.db b/memorization_tasks.db index 06207fc..858c0f4 100644 Binary files a/memorization_tasks.db and b/memorization_tasks.db differ diff --git a/test.py b/test.py deleted file mode 100644 index 196c50b..0000000 --- a/test.py +++ /dev/null @@ -1,13 +0,0 @@ -from nicegui import ui - -with ui.grid(): - data = ui.button("Text") - #, on_click=lambda: show_element(data)) - -def show_element(data): - with ui.row(): - ui.input(label="Add Text") - -data.on_click(lambda: show_element(data)) - -ui.run() diff --git a/theme.py b/theme.py index f069154..b107422 100644 --- a/theme.py +++ b/theme.py @@ -5,6 +5,7 @@ from nicegui import ui tnt='rgba(30, 206, 0, 0.25)' cubbies='rgba(25, 39, 255, 0.25)' sparks='rgba(255, 0, 0, 0.25)' +dark_mode = ui.dark_mode(True) @contextmanager def frame(navigation_title: str): @@ -18,7 +19,9 @@ def frame(navigation_title: str): ui.space() ui.space() with ui.row(): + # ui.switch('Dark Mode').bind_value(dark_mode) ui.link('Admin', '/').classes(replace='text-white') ui.link('Dashboard', '/dashboard').classes(replace='text-white') with ui.column().classes('absolute-center items-center'): yield + diff --git a/utils.py b/utils.py index 1bc353f..b74f1f7 100644 --- a/utils.py +++ b/utils.py @@ -1,42 +1,65 @@ import data +import requests db = data.CON cur = db.cursor() -class Utils(): +class Utils: def __init__(): pass def get_unique_people(): - data = cur.execute('select distinct person from tasks;') + data = cur.execute("select distinct person from tasks;") ppl = data.fetchall() return ppl def get_specific_person(person): - res = cur.execute(f"select verse,verse_passage,status from tasks where person='{person.value}'") + res = cur.execute( + f"select verse,verse_passage,status from tasks where person='{person.value}'" + ) dbinfo = res.fetchall() return dbinfo def toggle_completion(verse, person, status): - ins = cur.execute(f"update tasks set status = '{status}' where person = '{person.value}' and verse = '{verse}'") + cur.execute( + f"update tasks set status = '{status}' where person = '{person.value}' and verse = '{verse}'" + ) db.commit() def get_persons_incomplete(person): - inc = cur.execute(f"select person, verse, verse_passage, club from tasks where status = '0' and person = '{person}'") + inc = cur.execute( + f"select person, verse, verse_passage, club from tasks where status = '0' and person = '{person}'" + ) incret = inc.fetchall() return incret - def edit_verse(person, verse, passage): - print(f"update tasks set verse_passage = '{passage.value}' where person = '{person.value}' and verse = '{verse}'") - vedit = cur.execute(f"update tasks set verse_passage = '{passage.value}' where person = '{person.value} and verse = '{verse}';") + def add_verse(person, verse, passage): + club = cur.execute( + f"select distinct club from tasks where person = '{person.value}'" + ) + clubstring = club.fetchone() + clubstring = "".join(clubstring) + cur.execute( + f"replace into tasks (person, verse, verse_passage, status, club) values('{person.value}', '{verse.value}', '{passage}', '0', '{clubstring}');" + ) db.commit() - def add_person(person): - print(person) - aperson = cur.execute(f"insert into tasks(person) values ('{person.value}')") + def edit_verse(person, verse, passage): + passage = passage.value.replace("'", '"') + cur.execute( + f"update tasks set verse_passage = '{passage}' where person = '{person.value}' and verse = '{verse}'" + ) + db.commit() + + def add_person(person, club): + cur.execute( + f"insert into tasks(person, club) values ('{person.value}', '{club.value}')" + ) db.commit() def delete_verse(verse, person): - dverse = cur.execute(f"delete from tasks where person = '{person.value}' and verse = '{verse}'") + cur.execute( + f"delete from tasks where person = '{person.value}' and verse = '{verse}'" + ) db.commit()