Item shares list on form
This commit is contained in:
parent
9413240165
commit
f76f9e42d6
6 changed files with 64 additions and 59 deletions
|
@ -192,21 +192,21 @@ function bm_type_field_undelete(sender, type_field_id) {
|
|||
document.getElementById('Field-' + type_field_id).classList.remove('field-opaque');
|
||||
}
|
||||
|
||||
function bm_item_relation_delete(sender, relation_name, relation_name_remove) {
|
||||
document.getElementById(relation_name_remove).value = '1';
|
||||
function bm_element_list_delete(sender, element_name, element_name_remove) {
|
||||
document.getElementById(element_name_remove).value = '1';
|
||||
sender.hidden = true;
|
||||
document.getElementById('Undelete-' + relation_name).hidden = false;
|
||||
var x = document.getElementsByClassName(relation_name + "-Col");
|
||||
document.getElementById('Undelete-' + element_name).hidden = false;
|
||||
var x = document.getElementsByClassName(element_name + "-Col");
|
||||
for (var i = 0; i < x.length; i++) {
|
||||
x[i].classList.add("field-opaque");
|
||||
}
|
||||
}
|
||||
|
||||
function bm_item_relation_undelete(sender, relation_name, relation_name_remove) {
|
||||
document.getElementById(relation_name_remove).value = '';
|
||||
function bm_element_list_undelete(sender, element_name, element_name_remove) {
|
||||
document.getElementById(element_name_remove).value = '';
|
||||
sender.hidden = true;
|
||||
document.getElementById('Delete-' + relation_name).hidden = false;
|
||||
var x = document.getElementsByClassName(relation_name + "-Col");
|
||||
document.getElementById('Delete-' + element_name).hidden = false;
|
||||
var x = document.getElementsByClassName(element_name + "-Col");
|
||||
for (var i = 0; i < x.length; i++) {
|
||||
x[i].classList.remove("field-opaque");
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
{{ end }}
|
||||
|
||||
{{ $shares_present := false }}
|
||||
{{ if (gt (len (index .item.FieldsSection "fields")) 0) }}
|
||||
{{ if (gt (len .item.Shares) 0) }}
|
||||
{{ $shares_present = true }}
|
||||
{{ end }}
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
|||
<a class="tab-button" onclick="bm_open_tab(this, 'tab-button', 'tab', 'fields')">Fields</a>
|
||||
{{ end }}
|
||||
<a class="tab-button" onclick="bm_open_tab(this, 'tab-button', 'tab', 'relationsSection')">Relations</a>
|
||||
{{ if $fields_present }}
|
||||
{{ if $shares_present }}
|
||||
<a class="tab-button" onclick="bm_open_tab(this, 'tab-button', 'tab', 'sharesSection')">Shares</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
@ -108,9 +108,9 @@
|
|||
</div>
|
||||
|
||||
{{ if $shares_present }}
|
||||
<div class="tab" id="shares" style="display: none">
|
||||
<div class="tab" id="sharesSection" style="display: none">
|
||||
<div id="shares">
|
||||
{{ template "items:shares"}}
|
||||
{{ template "item:shares" .}}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
|
|
@ -51,8 +51,8 @@
|
|||
</td>
|
||||
<td class="no-label {{$relation_name}}-Col">{{ widget_relation_type $relation_name $relation_type `id="$relation_name"` }}</td>
|
||||
<td class="no-label">
|
||||
<button id="Delete-{{$relation_name}}" class="delete" type="button" onclick="bm_item_relation_delete(this, {{$relation_name}}, {{$relation_name_remove}})"><i class="bi bi-x-square" title="Remove"></i><span>Remove</span></button>
|
||||
<button id="Undelete-{{$relation_name}}" style="margin-right: 5px;" class="delete" type="button" onclick="bm_item_relation_undelete(this, {{$relation_name}}, {{$relation_name_remove}})" hidden><i class="bi bi-arrow-counterclockwise" title="Undo"></i><span>Undo</span></button>
|
||||
<button id="Delete-{{$relation_name}}" class="delete" type="button" onclick="bm_element_list_delete(this, {{$relation_name}}, {{$relation_name_remove}})"><i class="bi bi-x-square" title="Remove"></i><span>Remove</span></button>
|
||||
<button id="Undelete-{{$relation_name}}" style="margin-right: 5px;" class="delete" type="button" onclick="bm_element_list_undelete(this, {{$relation_name}}, {{$relation_name_remove}})" hidden><i class="bi bi-arrow-counterclockwise" title="Undo"></i><span>Undo</span></button>
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
|
|
|
@ -2,57 +2,34 @@
|
|||
<table class="table-all striped responsive">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Item</th>
|
||||
<th>Categories</th>
|
||||
<th>Tags</th>
|
||||
<th>Relation type</th>
|
||||
<th>Token</th>
|
||||
<th>Edit</th>
|
||||
<th>State date time</th>
|
||||
<th>End date time</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="shares-items">
|
||||
{{ range .item.Relations}}
|
||||
{{ $relation_name := printf "%s%v-%v" "ItemRelation-" .Item_id .Related_item_id }}
|
||||
{{ $relation_name_remove := printf "%s%v-%v" "ItemRelation-ToRemove-" .Item_id .Related_item_id }}
|
||||
<tr id="{{$relation_name}}-Row">
|
||||
<td class="no-label {{$relation_name}}-Col">
|
||||
{{ $target_id := .Related_item_id}}
|
||||
{{ $relation_type := .Relation_type }}
|
||||
{{ if eq .Related_item_id $.item.Id }}
|
||||
{{ $target_id = .Item_id}}
|
||||
{{ if eq "Parent" .Relation_type}}
|
||||
{{ $relation_type = "Child" }}
|
||||
{{ else if eq "Child" .Relation_type}}
|
||||
{{ $relation_type = "Parent" }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<a href="/item/view/{{$target_id}}" hx-get="/item/view/{{$target_id}}" hx-target="body" hx-swap="beforeend"><i class="{{.Type_icon}}" title="{{.Type_title}}"></i> {{.Title}}</a>
|
||||
<input type="hidden" id="{{$relation_name_remove}}" name="{{$relation_name_remove}}" value=""/>
|
||||
{{ range .item.Shares}}
|
||||
{{ $share_name := printf "%s%v" "Share-" .Id }}
|
||||
{{ $share_name_remove := printf "%s%v" "ItemShare-ToRemove-" .Id }}
|
||||
<tr id="{{$share_name}}-Row">
|
||||
<td class="no-label {{$share_name}}-Col">
|
||||
{{ .Token }}
|
||||
<input type="hidden" id="{{$share_name_remove}}" name="{{$share_name_remove}}" value=""/>
|
||||
</td>
|
||||
<td class="no-label {{$relation_name}}-Col">
|
||||
{{ if gt (len .Categories) 0 }}
|
||||
<i class="hide-medium hide-large bi bi-tags-fill"></i>
|
||||
{{ range (stringToArray .Categories "|")}}
|
||||
{{ $category_name := index $.categoriesMap .}}
|
||||
<div class="tag" style="padding: 3px">
|
||||
{{ $category_name }}
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<td class="no-label {{$share_name}}-Col">
|
||||
{{ .PermissionEdit }}
|
||||
</td>
|
||||
<td class="no-label {{$relation_name}}-Col">
|
||||
{{ if gt (len .Tags) 0 }}
|
||||
<i class="hide-medium hide-large bi bi-tags"></i>
|
||||
{{ range (stringToArray .Tags ",")}}
|
||||
<div class="tag" style="padding: 3px">
|
||||
{{ . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<td class="no-label {{$share_name}}-Col">
|
||||
{{ .StartDatetime }}
|
||||
</td>
|
||||
<td class="no-label {{$share_name}}-Col">
|
||||
{{ .EndDatetime }}
|
||||
</td>
|
||||
<td class="no-label {{$relation_name}}-Col">{{ widget_relation_type $relation_name $relation_type `id="$relation_name"` }}</td>
|
||||
<td class="no-label">
|
||||
<button id="Delete-{{$relation_name}}" class="delete" type="button" onclick="bm_item_relation_delete(this, {{$relation_name}}, {{$relation_name_remove}})"><i class="bi bi-x-square" title="Remove"></i><span>Remove</span></button>
|
||||
<button id="Undelete-{{$relation_name}}" style="margin-right: 5px;" class="delete" type="button" onclick="bm_item_relation_undelete(this, {{$relation_name}}, {{$relation_name_remove}})" hidden><i class="bi bi-arrow-counterclockwise" title="Undo"></i><span>Undo</span></button>
|
||||
<button id="Delete-{{$share_name}}" class="delete" type="button" onclick="bm_element_list_delete(this, {{$share_name}}, {{$share_name_remove}})"><i class="bi bi-x-square" title="Remove"></i><span>Remove</span></button>
|
||||
<button id="Undelete-{{$share_name}}" style="margin-right: 5px;" class="delete" type="button" onclick="bm_element_list_undelete(this, {{$share_name}}, {{$share_name_remove}})" hidden><i class="bi bi-arrow-counterclockwise" title="Undo"></i><span>Undo</span></button>
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
|
|
|
@ -742,7 +742,7 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
if r.Header.Get("HX-Request") == "true" {
|
||||
|
||||
err := response.HXFragment(fullBuf, []string{"items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl"}, "page:content", data)
|
||||
err := response.HXFragment(fullBuf, []string{"items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl", "items/shares.tmpl"}, "page:content", data)
|
||||
if err != nil {
|
||||
app.serverError(w, r, err)
|
||||
}
|
||||
|
@ -755,7 +755,7 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
|
|||
w.Header().Add("HX-Trigger-After-Settle", `{"activateEasyMDE":"item-description"}`)
|
||||
fullBuf.WriteTo(w)
|
||||
} else {
|
||||
err := response.Page(w, http.StatusOK, data, []string{"items/update_title.tmpl", "items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl", "items/form_jscode.tmpl"})
|
||||
err := response.Page(w, http.StatusOK, data, []string{"items/update_title.tmpl", "items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl", "items/shares.tmpl", "items/form_jscode.tmpl"})
|
||||
if err != nil {
|
||||
app.serverError(w, r, err)
|
||||
}
|
||||
|
@ -833,6 +833,14 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
|
|||
itemModel.UpdateRelation(item_id, related_item_id, values[0])
|
||||
}
|
||||
}
|
||||
shareId, found := strings.CutPrefix(name, "ItemShare-ToRemove-")
|
||||
if found && len(values) > 0 {
|
||||
valuesRemove, isMapContainsKey := r.PostForm["ItemShare-ToRemove-"+shareId]
|
||||
if isMapContainsKey && valuesRemove[0] == "1" {
|
||||
shareIdInt, _ := strconv.ParseInt(shareId, 10, 64)
|
||||
itemModel.DeleteShare(shareIdInt)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for type_field_id, values := range fieldsValues {
|
||||
|
@ -843,12 +851,14 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
|
|||
itemModel.SaveKeywords(item, &fields, fieldsValues)
|
||||
|
||||
relations, _, _ := itemModel.GetRelations(item.Id)
|
||||
shares, _, _ := itemModel.GetShares(item.Id)
|
||||
|
||||
data["item"] = itemForm{
|
||||
Title: item.Title,
|
||||
Type_icon: item.Type_icon,
|
||||
Type_title: item.Type_title,
|
||||
Relations: relations,
|
||||
Shares: shares,
|
||||
}
|
||||
|
||||
data["FieldsSection"] = fieldsSection
|
||||
|
@ -872,6 +882,11 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
|
|||
app.serverError(w, r, err)
|
||||
}
|
||||
|
||||
err = response.HXFragmentOOB(fullBuf, []string{"items/shares.tmpl"}, "item:shares", data, "shares")
|
||||
if err != nil {
|
||||
app.serverError(w, r, err)
|
||||
}
|
||||
|
||||
data["uisection"] = "general"
|
||||
err = response.HXFragmentOOB(fullBuf, []string{"items/fields.tmpl"}, "items:fields", data, "fields-general")
|
||||
if err != nil {
|
||||
|
|
|
@ -444,6 +444,19 @@ func (model *ItemModel) DeleteRelation(id int64, related_id int64) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (model *ItemModel) DeleteShare(shareId int64) error {
|
||||
ctx, cancel := database.GetContext()
|
||||
defer cancel()
|
||||
|
||||
query := `DELETE FROM bm_item_shares WHERE id=$1`
|
||||
_, err := model.DB.ExecContext(ctx, query, shareId)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (model *ItemModel) GetRelations(id int64) ([]ItemRelation, bool, error) {
|
||||
ctx, cancel := database.GetContext()
|
||||
defer cancel()
|
||||
|
|
Loading…
Add table
Reference in a new issue