-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
90 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,23 @@ | ||
# Default User Custom Field Value | ||
|
||
**Theme Summary** | ||
**Make a User Custom Field have a default value (proof of concept) ** | ||
|
||
For more information, please see: **url to meta topic** | ||
This sets user_custom_field_1 to "I am not important" if it is null. | ||
|
||
To be useful, settings would determine which field was given a default value and what the value would be. To be really useful, it would do it for an arbitray number of custom user fields. | ||
|
||
Also, it would be better to move the code like | ||
|
||
``` | ||
// if [userfields[1] is null make it a default strring | ||
if (userFields[1] == null) { | ||
userFields[1] = "I am not important"; | ||
} | ||
console.log("got user fields!", userFields); | ||
``` | ||
|
||
into a function so that it could be called in both places. | ||
|
||
It might be better if it called `super()` and/or just updated `this.site.get("user_fields")` rather than overriding anything. | ||
|
||
The other solution would be a plugin that set defaults on custom fields when a user was created and/or had a job that created some default value if none existed. An advantage of this solution is that changing the default value is easy since it doesn't actually exist, where a plugin would need to update all user custom field if there was a change. |
Empty file.
Empty file.
Empty file.
Empty file.
70 changes: 70 additions & 0 deletions
70
javascripts/discourse/api-initializers/default-user-custom-field-value.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
import { apiInitializer } from "discourse/lib/api"; | ||
import discourseComputed, { on } from "discourse-common/utils/decorators"; | ||
import { set } from "@ember/object"; // <-- Import set function here | ||
import { dasherize } from "@ember/string"; | ||
import EmberObject from "@ember/object"; // Import EmberObject here | ||
import UserCardContents from "discourse/components/user-card-contents"; | ||
import { isEmpty } from "@ember/utils"; | ||
|
||
export default apiInitializer("1.8.0", ( api ) => { | ||
console.log("hello world from api initializer!"); | ||
|
||
|
||
api.modifyClass("component:user-card-contents", { | ||
pluginId: "discourse-default-user-custom-fields", | ||
@discourseComputed("[email protected]") | ||
publicUserFields() { | ||
// Custom logic here | ||
console.log("hello world from publicUserFields in my theme component!"); | ||
const siteUserFields = this.site.get("user_fields"); | ||
if (!isEmpty(siteUserFields)) { | ||
console.log("got site user fields!", siteUserFields); | ||
const userFields = this.get("user.user_fields"); | ||
// if [userfields[1] is null make it a default strring | ||
if (userFields[1] == null) { | ||
userFields[1] = "I am not important"; | ||
} | ||
console.log("got user fields!", userFields); | ||
return siteUserFields | ||
.filterBy("show_on_user_card", true) | ||
.sortBy("position") | ||
.map((field) => { | ||
set(field, "dasherized_name", dasherize(field.get("name"))); | ||
const value = userFields ? userFields[field.get("id")] : null; | ||
return isEmpty(value) ? null : EmberObject.create({ value, field }); | ||
}) | ||
.compact(); | ||
} | ||
} | ||
}); | ||
|
||
// Modify User controller | ||
api.modifyClass("controller:user", { | ||
pluginId: "discourse-default-user-custom-fields", | ||
|
||
@discourseComputed("[email protected]") | ||
publicUserFields() { | ||
console.log("Overriding publicUserFields in User controller..."); | ||
const siteUserFields = this.site.get("user_fields"); | ||
|
||
if (!isEmpty(siteUserFields)) { | ||
const userFields = this.get("model.user_fields"); | ||
if (userFields[1] == null) { | ||
userFields[1] = "I am not important"; | ||
} | ||
console.log("got user fields!", userFields); | ||
return siteUserFields | ||
.filterBy("show_on_profile", true) | ||
.sortBy("position") | ||
.map((field) => { | ||
set(field, "dasherized_name", dasherize(field.get("name"))); | ||
const value = userFields | ||
? userFields[field.get("id").toString()] | ||
: null; | ||
return isEmpty(value) ? null : EmberObject.create({ value, field }); | ||
}) | ||
.compact(); | ||
} | ||
}, | ||
}); | ||
}); |
Empty file.
Empty file.
Empty file.
Empty file.