-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Expand file tree
/
Copy pathMultiTextField-Picker.Edit.cshtml
More file actions
67 lines (59 loc) · 3.17 KB
/
MultiTextField-Picker.Edit.cshtml
File metadata and controls
67 lines (59 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@model OrchardCore.ContentFields.ViewModels.EditMultiTextFieldViewModel
@using System.Text.Json
@using OrchardCore.ContentFields
@using OrchardCore.Mvc.Utilities
@using OrchardCore.Localization.Data
@inject IDataLocalizer D
@{
var settings = Model.PartFieldDefinition.GetSettings<MultiTextFieldSettings>();
var selectedValues = new List<object>();
foreach (var option in settings.Options)
{
if (Model.Values?.Contains(option.Value) == true)
{
selectedValues.Add(new { value = option.Value, name = option.Name });
}
}
var jSelectedValues = JConvert.SerializeObject(selectedValues);
var jOptions = JConvert.SerializeObject(settings.Options.Select(o => new { value = o.Value, name = o.Name }));
var partName = Model.PartFieldDefinition.PartDefinition.Name;
var fieldName = Model.PartFieldDefinition.Name;
var vueElementId = $"MultiTextField-Picker_{partName}_{fieldName}_{Guid.NewGuid().ToString("n")}";
var valuesKey = Html.NameFor(x => x.Values);
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), DataLocalizationContext.ContentField(Model.PartFieldDefinition.PartDefinition.Name)];
}
<script asp-src="~/OrchardCore.ContentFields/Scripts/vue-multiselect-multitextfieldpicker.min.js" debug-src="~/OrchardCore.ContentFields/Scripts/vue-multiselect-multitextfieldpicker.js" asp-name="multitextfieldpicker" at="Foot" depends-on="vuejs:2,vue-multiselect:2"></script>
<style asp-name="vue-multiselect" version="2" at="Foot"></style>
<div class="@Orchard.GetFieldWrapperClasses(Model.PartFieldDefinition)" id="@Html.IdFor(x => x.Values)_FieldWrapper">
<label class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@localizedFieldName</label>
<div class="@Orchard.GetEndClasses()">
<div id="@vueElementId" class="multitextfieldpicker" data-selectedvalues="@jSelectedValues" data-options="@jOptions" data-valueskey="@valuesKey">
<div class="w-xl-50">
<input v-for="v in value" v-bind:name="valuesKey" v-bind:value="v.value" type="hidden" />
<vue-multiselect v-model="value"
placeholder="@T["Type to search"]"
select-label="@T["Select"]"
deselect-label="@T["Remove"]"
track-by="value"
label="name"
:options="options"
:multiple="true"
:show-labels="false"
:close-on-select="false"
:taggable="true"
tag-position="bottom">
<template slot="noOptions">
@T["No values found"]
</template>
</vue-multiselect>
</div>
@if (!string.IsNullOrEmpty(settings.Hint))
{
<span class="hint">@settings.Hint</span>
}
</div>
</div>
</div>
<script depends-on="multitextfieldpicker" at="Foot">
initMultiTextFieldPicker(document.querySelector("#@vueElementId"));
</script>