Skip to content
Merged
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
6 changes: 6 additions & 0 deletions Http/Controllers/Backend/ContentTypesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ public function getAssets(Request $request)
$data['empty_item'][$column] = null;
}

$data['empty_item']['content_statuses'] = [
'draft',
'published',
'protected',
];

$data['field_types'] = FieldType::select('id', 'name', 'slug', 'meta')
->get();

Expand Down
2 changes: 1 addition & 1 deletion Http/Controllers/Backend/ContentsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ public function deleteItem(Request $request,$content_slug,$id)
}
}
//----------------------------------------------------------
public function itemAction(Request $request,$id,$action)
public function itemAction(Request $request,$content_type_slug,$id,$action)
{
try{
return Content::itemAction($request,$id,$action);
Expand Down
8 changes: 4 additions & 4 deletions Models/Content.php
Original file line number Diff line number Diff line change
Expand Up @@ -364,15 +364,15 @@ public static function itemAction($request, $id, $type): array
{
switch($type)
{
case 'activate':
case 'published':
self::where('id', $id)
->withTrashed()
->update(['status' => 1]);
->update(['status' => 'published']);
break;
case 'deactivate':
case 'draft':
self::where('id', $id)
->withTrashed()
->update(['status' => null]);
->update(['status' => 'draft']);
break;
case 'trash':
self::find($id)->delete();
Expand Down
2 changes: 1 addition & 1 deletion Models/ContentBase.php
Original file line number Diff line number Diff line change
Expand Up @@ -891,7 +891,7 @@ public static function storeFormGroups(Content $content, $groups, $type = null)
if(!$field['content']){
$row_to_delete_ids = array_diff($relatable_ids, []);
}else{
$row_to_delete_ids = array_diff($relatable_ids, [$field['content']]);
$row_to_delete_ids = array_diff($relatable_ids, $field['content']);
}

if(count($row_to_delete_ids) > 0)
Expand Down
2 changes: 1 addition & 1 deletion Models/ContentType.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public function getContentStatusesAttribute($value)
{
return json_decode($value);
}
return null;
return [];
}
//-------------------------------------------------
public function setMetaAttribute($value)
Expand Down
2 changes: 1 addition & 1 deletion Models/ContentTypeBase.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ public function getContentStatusesAttribute($value)
{
return json_decode($value);
}
return null;
return [];
}
//-------------------------------------------------
public function setMetaAttribute($value)
Expand Down
711 changes: 356 additions & 355 deletions Resources/assets/build/index.js

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions Resources/assets/build/vanilla-picker-NKbIFE8h.js

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions Vue/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@
"primevue": "3.35.0",
"qs": "^6.11.0",
"quill": "^1.3.7",
"uuid": "^9.0.1",
"vue": "^3.2.37",
"vue-router": "^4.1.2",
"vue3-treeselect": "^0.1.10",
"vuedraggable": "^4.1.0"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion Vue/pages/contents/components/ContentFields.vue
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ const props = defineProps({
<div class="w-full flex flex-column gap-1">
<label class="font-medium line-height-1 text-xs">{{ field.name }}</label>
<div v-if="!field.content || typeof field.content === 'string'
|| typeof field.content === 'number' || typeof field.content === 'object'
|| typeof field.content === 'number'
|| store.assets.non_repeatable_fields.includes(field.type.slug)"
class="flex justify-content-between align-items-start gap-3 w-full">
<div class="flex-grow-1">
Expand Down
7 changes: 1 addition & 6 deletions Vue/pages/contents/components/Table.vue
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,7 @@ const useVaah = vaah();
header="Status">

<template #body="prop">
<InputSwitch v-model.bool="prop.data.status"
data-testid="contents-table-status"
v-bind:false-value="0" v-bind:true-value="1"
class="p-inputswitch-sm"
@input="store.toggleIsActive(prop.data)">
</InputSwitch>
{{useVaah.toLabel(prop.data.status)}}
</template>

</Column>
Expand Down
20 changes: 9 additions & 11 deletions Vue/pages/contenttypes/Form.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ const route = useRoute();
const useVaah = vaah();

onMounted(async () => {
store.enable_status_editing_indexes = [];
if(route.params && route.params.id)
{
await store.getItem(route.params.id);
}

await store.watchItem();
store.getNewStatus();

await store.getFormMenu();
});
Expand Down Expand Up @@ -188,7 +188,7 @@ const toggleFormMenu = (event) => {
v-model="store.item.is_commentable"/>
</VhField>
<draggable
v-model="store.new_status"
v-model="store.item.content_statuses"
class="dragArea list-group"
:group="{ name: 'content-types', pull: 'clone', put: false }"
@start="drag=true"
Expand All @@ -198,20 +198,18 @@ const toggleFormMenu = (event) => {
<div class="p-inputgroup mb-2">
<Button icon="pi pi-bars" class="p-button-sm p-button-secondary"/>
<InputText class="w-full p-inputtext-sm"
v-if="index == store.edit_status_index && !store.disable_status_editing"
name="contenttypes-statuses_name"
data-testid="contenttypes-statuses_name"
v-model="store.new_status[index]"/>
<InputText class="w-full p-inputtext-sm"
v-else
name="contenttypes-statuses_name"
data-testid="contenttypes-statuses_name"
:disabled="true"
v-model="store.new_status[index]"/>
:disabled="!store.enable_status_editing_indexes.includes(index)"
v-model="store.item.content_statuses[index]"/>
<Button icon="pi pi-pencil"
data-testid="contenttypes-statuses_name_edit"
@click="store.toggleEditStatus(index)"
class="p-button-sm p-button-secondary"/>
<Button icon="pi pi-times"
data-testid="contenttypes-statuses_name_edit"
@click="store.removeStatus(index)"
class="p-button-sm p-button-secondary"/>
</div>
</template>
</draggable>
Expand All @@ -222,7 +220,7 @@ const toggleFormMenu = (event) => {
name="contenttypes-new_status"
data-testid="contenttypes-new_status"
v-model="store.new_status_item"
@blur="store.addStatus"/>
v-on:keyup.enter="store.addStatus"/>
</VhField>

</div>
Expand Down
34 changes: 12 additions & 22 deletions Vue/stores/store-contenttypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export const useContentTypeStore = defineStore({
list: null,
item: null,
fillable:null,
enable_status_editing_indexes:[],
empty_query:empty_states.query,
empty_action:empty_states.action,
query: vaah().clone(empty_states.query),
Expand All @@ -64,11 +65,6 @@ export const useContentTypeStore = defineStore({
list_bulk_menu: [],
item_menu_list: [],
item_menu_state: null,
new_status: [
'draft',
'published',
'protected',
],
new_status_item: null,
edit_status_index: null,
disable_status_editing: true,
Expand Down Expand Up @@ -437,7 +433,6 @@ export const useContentTypeStore = defineStore({
case 'create-and-new':
case 'create-and-close':
case 'create-and-clone':
this.item.content_statuses = JSON.stringify(this.new_status);
options.method = 'POST';
options.params = item;
break;
Expand All @@ -449,7 +444,6 @@ export const useContentTypeStore = defineStore({
case 'save':
case 'save-and-close':
case 'save-and-clone':
this.item.content_statuses = JSON.stringify(this.new_status);
options.method = 'PUT';
options.params = item;
ajax_url += '/'+item.id
Expand Down Expand Up @@ -905,28 +899,24 @@ export const useContentTypeStore = defineStore({

},
//---------------------------------------------------------------------
getNewStatus(){
if(this.item.id){
this.new_status = JSON.parse(this.item.content_statuses);
}
},
//---------------------------------------------------------------------
addStatus(){
this.item.content_statuses = null;
this.new_status.push(this.new_status_item);
this.item.content_statuses.push(this.new_status_item);
this.new_status_item = null;
},
//---------------------------------------------------------------------
removeStatus(index){
this.item.content_statuses.splice(index, 1);
},
//---------------------------------------------------------------------
toggleEditStatus(status_index)
{
this.edit_status_index = status_index;
if(this.disable_status_editing)
{
this.disable_status_editing = false;
} else
{
this.disable_status_editing = true;
if(this.enable_status_editing_indexes.includes(status_index)){
const index = this.enable_status_editing_indexes.indexOf(status_index);
this.enable_status_editing_indexes.splice(index, 1);
}else{
this.enable_status_editing_indexes.push(status_index);
}

},
//---------------------------------------------------------------------
async toContentStructure(item) {
Expand Down