diff --git a/zero.Core/Api/LanguagesApi.cs b/zero.Core/Api/LanguagesApi.cs
index 7bd6a386..6a050d7e 100644
--- a/zero.Core/Api/LanguagesApi.cs
+++ b/zero.Core/Api/LanguagesApi.cs
@@ -31,16 +31,22 @@ namespace zero.Core.Api
}
+ ///
+ public async Task> GetByIds(params string[] ids)
+ {
+ return await GetByIds(ids);
+ }
+
+
///
public async Task> GetAll()
{
- using (IAsyncDocumentSession session = Raven.OpenAsyncSession())
- {
- return await session.Query()
- .Scope(Scope)
- .OrderByDescending(x => x.CreatedDate)
- .ToListAsync();
- }
+ using IAsyncDocumentSession session = Raven.OpenAsyncSession();
+
+ return await session.Query()
+ .Scope(Scope)
+ .OrderByDescending(x => x.CreatedDate)
+ .ToListAsync();
}
@@ -66,12 +72,9 @@ namespace zero.Core.Api
{
query.SearchFor(entity => entity.Name);
- using (IAsyncDocumentSession session = Raven.OpenAsyncSession())
- {
- return await session.Query()
- .Scope(Scope)
- .ToQueriedListAsync(query);
- }
+ using IAsyncDocumentSession session = Raven.OpenAsyncSession();
+
+ return await session.Query().Scope(Scope).ToQueriedListAsync(query);
}
@@ -97,6 +100,11 @@ namespace zero.Core.Api
///
Task GetById(string id);
+ ///
+ /// Get countries by ids
+ ///
+ Task> GetByIds(params string[] ids);
+
///
/// Get all available languages
///
diff --git a/zero.Core/Entities/Language.cs b/zero.Core/Entities/Language.cs
index 6469a60a..1f3ee8e7 100644
--- a/zero.Core/Entities/Language.cs
+++ b/zero.Core/Entities/Language.cs
@@ -13,6 +13,9 @@ namespace zero.Core.Entities
///
public bool IsDefault { get; set; }
+ ///
+ public bool IsOptional { get; set; }
+
///
public string InheritedLanguageId { get; set; }
}
@@ -30,6 +33,11 @@ namespace zero.Core.Entities
///
bool IsDefault { get; set; }
+ ///
+ /// Whether this language is optional and does not have to be filled out
+ ///
+ bool IsOptional { get; set; }
+
///
/// If this language is inherited it gets all missing properties from its parent
///
diff --git a/zero.Web.UI/App/components/forms/toggle.vue b/zero.Web.UI/App/components/forms/toggle.vue
index feca30af..fc09e710 100644
--- a/zero.Web.UI/App/components/forms/toggle.vue
+++ b/zero.Web.UI/App/components/forms/toggle.vue
@@ -99,11 +99,11 @@
transform: translateX(14px);
}
- .is-primary &
+ /*.is-primary &
{
background: var(--color-primary);
box-shadow: 0 0 0 4px var(--color-primary-low);
- }
+ }*/
}
}
diff --git a/zero.Web.UI/App/editor/fields/language.vue b/zero.Web.UI/App/editor/fields/language.vue
new file mode 100644
index 00000000..0e1c3eea
--- /dev/null
+++ b/zero.Web.UI/App/editor/fields/language.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zero.Web.UI/App/renderers/language.js b/zero.Web.UI/App/renderers/language.js
index 3e47c6ff..f8109488 100644
--- a/zero.Web.UI/App/renderers/language.js
+++ b/zero.Web.UI/App/renderers/language.js
@@ -20,11 +20,20 @@
},
{
field: 'code',
- display: 'text'
+ display: 'text',
+ required: true
+ },
+ {
+ field: 'inheritedLanguageId',
+ display: 'language'
},
{
field: 'isDefault',
display: 'toggle'
+ },
+ {
+ field: 'isOptional',
+ display: 'toggle'
}
]
};
\ No newline at end of file
diff --git a/zero.Web.UI/App/resources/languages.js b/zero.Web.UI/App/resources/languages.js
index ce00def4..d72a7951 100644
--- a/zero.Web.UI/App/resources/languages.js
+++ b/zero.Web.UI/App/resources/languages.js
@@ -32,6 +32,16 @@ export default {
return Axios.get('languages/getSupportedCultures').then(res => Promise.resolve(res.data));
},
+ getPreviews(ids)
+ {
+ return Axios.get('languages/getPreviews', { params: { ids } }).then(res => Promise.resolve(res.data));
+ },
+
+ getForPicker()
+ {
+ return Axios.get('languages/getForPicker').then(res => Promise.resolve(res.data));
+ },
+
// save a language
save(model)
{
diff --git a/zero.Web.UI/Sass/Core/_forms.scss b/zero.Web.UI/Sass/Core/_forms.scss
index 575df9c8..9e42d9ba 100644
--- a/zero.Web.UI/Sass/Core/_forms.scss
+++ b/zero.Web.UI/Sass/Core/_forms.scss
@@ -61,6 +61,7 @@ textarea
-webkit-appearance: none;
border: none;
font-size: var(--font-size);
+ background: none;
}
&:after
diff --git a/zero.Web/Controllers/LanguagesController.cs b/zero.Web/Controllers/LanguagesController.cs
index eecae652..2734ea11 100644
--- a/zero.Web/Controllers/LanguagesController.cs
+++ b/zero.Web/Controllers/LanguagesController.cs
@@ -1,4 +1,6 @@
using Microsoft.AspNetCore.Mvc;
+using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using zero.Core.Api;
using zero.Core.Entities;
@@ -49,6 +51,25 @@ namespace zero.Web.Controllers
public IActionResult GetSupportedCultures() => Json(Api.GetAllCultures(Options.SupportedLanguages));
+ public async Task GetForPicker() => Json((await Api.GetAll()).Select(x => new SelectModel()
+ {
+ Id = x.Id,
+ Name = x.Name,
+ IsActive = x.IsActive
+ }));
+
+
+ public async Task GetPreviews(List ids)
+ {
+ return JsonPreviews(await Api.GetByIds(ids.ToArray()), item => new PreviewModel()
+ {
+ Id = item.Id,
+ Icon = "fth-globe",
+ Name = item.Name
+ });
+ }
+
+
///
/// Save language
///
diff --git a/zero.Web/Resources/Localization/zero.en-us.json b/zero.Web/Resources/Localization/zero.en-us.json
index 25fce9df..d2323173 100644
--- a/zero.Web/Resources/Localization/zero.en-us.json
+++ b/zero.Web/Resources/Localization/zero.en-us.json
@@ -331,7 +331,9 @@
"code_text": "Code in ISO 3166-1 format",
"isDefault": "Default",
"isDefault_text": "Use as default language",
- "inheritedLanguageId": "Inherit from",
+ "isOptional": "Optional",
+ "isOptional_text": "Values for an optional language must not be entered, even if the field is required",
+ "inheritedLanguageId": "Fallback",
"inheritedLanguageId_text": "To allow multi-lingual content to fall back to another language if not present in the requested language, select it here"
}
},