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}`,
|
siteSettings: `${settingsBase}`,
|
||||||
updateSiteSettings: `${settingsBase}`,
|
updateSiteSettings: `${settingsBase}`,
|
||||||
testWebhooks: `${settingsBase}/webhooks/test`,
|
testWebhooks: `${settingsBase}/webhooks/test`,
|
||||||
|
customPages: `${settingsBase}/custom-pages`,
|
||||||
|
customPage: id => `${settingsBase}/custom-pages/${id}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -19,4 +21,19 @@ export default {
|
||||||
let response = await apiReq.put(settingsURLs.updateSiteSettings, body);
|
let response = await apiReq.put(settingsURLs.updateSiteSettings, body);
|
||||||
return response.data;
|
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>
|
</v-btn>
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
<v-row class="mt-1">
|
<draggable class="row mt-1" v-model="customPages">
|
||||||
<v-col
|
<v-col
|
||||||
:sm="6"
|
:sm="6"
|
||||||
:md="6"
|
:md="6"
|
||||||
:lg="4"
|
:lg="4"
|
||||||
:xl="3"
|
:xl="3"
|
||||||
v-for="item in customPages"
|
v-for="(item, index) in customPages"
|
||||||
:key="item + item.id"
|
:key="item + item.id"
|
||||||
>
|
>
|
||||||
<v-card>
|
<v-card>
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
|
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
Card Position: {{ item.position }}
|
Card Position: {{ index }}
|
||||||
<div>
|
<div>
|
||||||
<v-chip
|
<v-chip
|
||||||
v-for="cat in item.categories"
|
v-for="cat in item.categories"
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-btn text small color="error">
|
<v-btn text small color="error" @click="deletePage(item.id)">
|
||||||
Delete
|
Delete
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-spacer> </v-spacer>
|
<v-spacer> </v-spacer>
|
||||||
|
@ -49,88 +49,50 @@
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</draggable>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
<v-card-actions>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn color="success" @click="savePages">
|
||||||
|
Save
|
||||||
|
</v-btn>
|
||||||
|
</v-card-actions>
|
||||||
</v-card>
|
</v-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import draggable from "vuedraggable";
|
||||||
|
import api from "@/api";
|
||||||
export default {
|
export default {
|
||||||
|
components: {
|
||||||
|
draggable,
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
customPages: [
|
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",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
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>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ export default {
|
||||||
removeCategory(index) {
|
removeCategory(index) {
|
||||||
this.value.categories.splice(index, 1);
|
this.value.categories.splice(index, 1);
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -47,7 +47,7 @@ class CustomPage(SqlAlchemyBase, BaseMixins):
|
||||||
single_parent=True,
|
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.name = name
|
||||||
self.slug = slug
|
self.slug = slug
|
||||||
self.position = position
|
self.position = position
|
||||||
|
|
|
@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends
|
||||||
from mealie.db.database import db
|
from mealie.db.database import db
|
||||||
from mealie.db.db_setup import generate_session
|
from mealie.db.db_setup import generate_session
|
||||||
from mealie.routes.deps import get_current_user
|
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.snackbar import SnackResponse
|
||||||
from mealie.schema.user import UserInDB
|
from mealie.schema.user import UserInDB
|
||||||
from sqlalchemy.orm.session import Session
|
from sqlalchemy.orm.session import Session
|
||||||
|
@ -30,6 +30,18 @@ async def create_new_page(
|
||||||
return SnackResponse.success("New Page Created")
|
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}")
|
@router.get("/{id}")
|
||||||
async def delete_custom_page(
|
async def delete_custom_page(
|
||||||
id: int,
|
id: int,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue