Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -29,14 +29,17 @@ def get_links():
|
|
29 |
c.execute("SELECT * FROM links")
|
30 |
links = [dict(row) for row in c.fetchall()]
|
31 |
conn.close()
|
|
|
32 |
return links
|
33 |
|
34 |
app.layout = dbc.Container([
|
|
|
35 |
dbc.Modal([
|
36 |
dbc.ModalHeader("Add New URL"),
|
37 |
dbc.ModalBody([
|
38 |
dbc.Input(id='new-url-name', placeholder="URL Name", className="mb-2"),
|
39 |
dbc.Input(id='new-url-link', placeholder="URL", className="mb-2"),
|
|
|
40 |
]),
|
41 |
dbc.ModalFooter(
|
42 |
dbc.Button("Add", id="add-url-button", className="ml-auto")
|
@@ -65,23 +68,36 @@ def toggle_modal(n1, n2, is_open):
|
|
65 |
return is_open
|
66 |
|
67 |
@callback(
|
68 |
-
Output('url-list', 'children'),
|
69 |
-
|
70 |
-
|
71 |
-
|
|
|
|
|
|
|
72 |
)
|
73 |
-
def update_url_list(n_clicks, new_name, new_link):
|
74 |
ctx = dash.callback_context
|
75 |
if ctx.triggered_id == 'add-url-button' and new_name and new_link:
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
|
83 |
links = get_links()
|
84 |
-
|
85 |
dbc.ListGroupItem([
|
86 |
dbc.Button(
|
87 |
link['name'],
|
@@ -98,6 +114,18 @@ def update_url_list(n_clicks, new_name, new_link):
|
|
98 |
], className="d-flex justify-content-between align-items-center")
|
99 |
for link in links
|
100 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
|
102 |
@callback(
|
103 |
Output('content-iframe', 'src'),
|
|
|
29 |
c.execute("SELECT * FROM links")
|
30 |
links = [dict(row) for row in c.fetchall()]
|
31 |
conn.close()
|
32 |
+
print(f"Retrieved links: {links}") # Debug print
|
33 |
return links
|
34 |
|
35 |
app.layout = dbc.Container([
|
36 |
+
dcc.Store(id='add-url-status', data=''),
|
37 |
dbc.Modal([
|
38 |
dbc.ModalHeader("Add New URL"),
|
39 |
dbc.ModalBody([
|
40 |
dbc.Input(id='new-url-name', placeholder="URL Name", className="mb-2"),
|
41 |
dbc.Input(id='new-url-link', placeholder="URL", className="mb-2"),
|
42 |
+
html.Div(id='add-url-feedback')
|
43 |
]),
|
44 |
dbc.ModalFooter(
|
45 |
dbc.Button("Add", id="add-url-button", className="ml-auto")
|
|
|
68 |
return is_open
|
69 |
|
70 |
@callback(
|
71 |
+
[Output('url-list', 'children'),
|
72 |
+
Output('add-url-feedback', 'children'),
|
73 |
+
Output('add-url-status', 'data')],
|
74 |
+
[Input('add-url-button', 'n_clicks'),
|
75 |
+
Input('add-url-status', 'data')],
|
76 |
+
[State('new-url-name', 'value'),
|
77 |
+
State('new-url-link', 'value')]
|
78 |
)
|
79 |
+
def update_url_list(n_clicks, status, new_name, new_link):
|
80 |
ctx = dash.callback_context
|
81 |
if ctx.triggered_id == 'add-url-button' and new_name and new_link:
|
82 |
+
try:
|
83 |
+
conn = get_db_connection()
|
84 |
+
c = conn.cursor()
|
85 |
+
new_id = str(uuid.uuid4())
|
86 |
+
c.execute("INSERT INTO links VALUES (?, ?, ?)", (new_id, new_name, new_link))
|
87 |
+
conn.commit()
|
88 |
+
conn.close()
|
89 |
+
feedback = html.Div("URL added successfully!", style={'color': 'green'})
|
90 |
+
status = 'added'
|
91 |
+
except Exception as e:
|
92 |
+
print(f"Error adding URL: {e}")
|
93 |
+
feedback = html.Div("Error adding URL. Please try again.", style={'color': 'red'})
|
94 |
+
status = 'error'
|
95 |
+
else:
|
96 |
+
feedback = None
|
97 |
+
status = ''
|
98 |
|
99 |
links = get_links()
|
100 |
+
url_list = [
|
101 |
dbc.ListGroupItem([
|
102 |
dbc.Button(
|
103 |
link['name'],
|
|
|
114 |
], className="d-flex justify-content-between align-items-center")
|
115 |
for link in links
|
116 |
]
|
117 |
+
|
118 |
+
return url_list, feedback, status
|
119 |
+
|
120 |
+
@callback(
|
121 |
+
[Output('new-url-name', 'value'),
|
122 |
+
Output('new-url-link', 'value')],
|
123 |
+
Input('add-url-status', 'data')
|
124 |
+
)
|
125 |
+
def clear_inputs(status):
|
126 |
+
if status == 'added':
|
127 |
+
return '', ''
|
128 |
+
return dash.no_update, dash.no_update
|
129 |
|
130 |
@callback(
|
131 |
Output('content-iframe', 'src'),
|