mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-22 14:33:33 -07:00
api start
This commit is contained in:
parent
341faace21
commit
77dd866431
5 changed files with 70 additions and 78 deletions
|
@ -7,6 +7,8 @@ const settingsURLs = {
|
|||
siteSettings: `${settingsBase}`,
|
||||
updateSiteSettings: `${settingsBase}`,
|
||||
testWebhooks: `${settingsBase}/webhooks/test`,
|
||||
customPages: `${settingsBase}/custom-pages`,
|
||||
customPage: id => `${settingsBase}/custom-pages/${id}`,
|
||||
};
|
||||
|
||||
export default {
|
||||
|
@ -19,4 +21,19 @@ export default {
|
|||
let response = await apiReq.put(settingsURLs.updateSiteSettings, body);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
async getPages() {
|
||||
let response = await apiReq.get(settingsURLs.customPages);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
async deletePage(id) {
|
||||
let response = await apiReq.delete(settingsURLs.customPage(id));
|
||||
return response.data;
|
||||
},
|
||||
|
||||
async updateAllPages(allPages) {
|
||||
let response = await apiReq.put(settingsURLs.customPages, allPages);
|
||||
return response;
|
||||
},
|
||||
};
|
||||
|
|
|
@ -9,13 +9,13 @@
|
|||
</v-btn>
|
||||
</span>
|
||||
</h2>
|
||||
<v-row class="mt-1">
|
||||
<draggable class="row mt-1" v-model="customPages">
|
||||
<v-col
|
||||
:sm="6"
|
||||
:md="6"
|
||||
:lg="4"
|
||||
:xl="3"
|
||||
v-for="item in customPages"
|
||||
v-for="(item, index) in customPages"
|
||||
:key="item + item.id"
|
||||
>
|
||||
<v-card>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<v-divider></v-divider>
|
||||
|
||||
<v-card-text>
|
||||
Card Position: {{ item.position }}
|
||||
Card Position: {{ index }}
|
||||
<div>
|
||||
<v-chip
|
||||
v-for="cat in item.categories"
|
||||
|
@ -39,7 +39,7 @@
|
|||
</v-card-text>
|
||||
|
||||
<v-card-actions>
|
||||
<v-btn text small color="error">
|
||||
<v-btn text small color="error" @click="deletePage(item.id)">
|
||||
Delete
|
||||
</v-btn>
|
||||
<v-spacer> </v-spacer>
|
||||
|
@ -49,88 +49,50 @@
|
|||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</draggable>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="success" @click="savePages">
|
||||
Save
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import draggable from "vuedraggable";
|
||||
import api from "@/api";
|
||||
export default {
|
||||
components: {
|
||||
draggable,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
customPages: [
|
||||
{
|
||||
id: 0,
|
||||
name: "My Page Name",
|
||||
slug: "my-page-name",
|
||||
position: 0,
|
||||
categories: [
|
||||
{
|
||||
id: 2,
|
||||
slug: "brownie",
|
||||
name: "brownie",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
slug: "dessert",
|
||||
name: "dessert",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
slug: "drink",
|
||||
name: "Drink",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "My Page Name 1",
|
||||
slug: "my-page-name",
|
||||
position: 1,
|
||||
categories: [
|
||||
{
|
||||
id: 2,
|
||||
slug: "brownie",
|
||||
name: "brownie",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
slug: "dessert",
|
||||
name: "dessert",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
slug: "drink",
|
||||
name: "Drink",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "My Page Name 2",
|
||||
slug: "my-page-name",
|
||||
position: 2,
|
||||
categories: [
|
||||
{
|
||||
id: 2,
|
||||
slug: "brownie",
|
||||
name: "brownie",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
slug: "dessert",
|
||||
name: "dessert",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
slug: "drink",
|
||||
name: "Drink",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
customPages: [],
|
||||
};
|
||||
},
|
||||
async mounted() {
|
||||
this.getPages();
|
||||
},
|
||||
methods: {
|
||||
async getPages() {
|
||||
this.customPages = await api.siteSettings.getPages();
|
||||
},
|
||||
async deletePage(id) {
|
||||
await api.siteSettings.deletePage(id);
|
||||
this.getPages();
|
||||
},
|
||||
async savePages() {
|
||||
this.customPages.forEach((element, index) => {
|
||||
element.position = index;
|
||||
});
|
||||
|
||||
await api.siteSettings.updateAllPages(this.customPages);
|
||||
|
||||
this.getPages;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ export default {
|
|||
removeCategory(index) {
|
||||
this.value.categories.splice(index, 1);
|
||||
},
|
||||
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -47,7 +47,7 @@ class CustomPage(SqlAlchemyBase, BaseMixins):
|
|||
single_parent=True,
|
||||
)
|
||||
|
||||
def __init__(self, session=None, name=None, slug=None, position=0, categories=[]) -> None:
|
||||
def __init__(self, session=None, name=None, slug=None, position=0, categories=[], *args, **kwargs) -> None:
|
||||
self.name = name
|
||||
self.slug = slug
|
||||
self.position = position
|
||||
|
|
|
@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends
|
|||
from mealie.db.database import db
|
||||
from mealie.db.db_setup import generate_session
|
||||
from mealie.routes.deps import get_current_user
|
||||
from mealie.schema.settings import CustomPageBase
|
||||
from mealie.schema.settings import CustomPageBase, CustomPageOut
|
||||
from mealie.schema.snackbar import SnackResponse
|
||||
from mealie.schema.user import UserInDB
|
||||
from sqlalchemy.orm.session import Session
|
||||
|
@ -30,6 +30,18 @@ async def create_new_page(
|
|||
return SnackResponse.success("New Page Created")
|
||||
|
||||
|
||||
@router.put("")
|
||||
async def update_multiple_pages(
|
||||
pages: list[CustomPageOut],
|
||||
session: Session = Depends(generate_session),
|
||||
current_user: UserInDB = Depends(get_current_user),
|
||||
):
|
||||
""" Update multiple custom pages """
|
||||
for page in pages:
|
||||
db.custom_pages.update(session, page.id, page.dict())
|
||||
return SnackResponse.success("Pages Updated")
|
||||
|
||||
|
||||
@router.get("/{id}")
|
||||
async def delete_custom_page(
|
||||
id: int,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue