2020-10-27 01:01:34 +01:00
|
|
|
import {UIEventSource} from "../../Logic/UIEventSource";
|
|
|
|
import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig";
|
|
|
|
import TagRenderingQuestion from "./TagRenderingQuestion";
|
|
|
|
import Translations from "../i18n/Translations";
|
|
|
|
import Combine from "../Base/Combine";
|
|
|
|
import TagRenderingAnswer from "./TagRenderingAnswer";
|
|
|
|
import State from "../../State";
|
2020-11-06 01:58:26 +01:00
|
|
|
import Svg from "../../Svg";
|
2021-06-14 02:39:23 +02:00
|
|
|
import Toggle from "../Input/Toggle";
|
|
|
|
import BaseUIElement from "../BaseUIElement";
|
2020-10-27 01:01:34 +01:00
|
|
|
|
2021-06-14 02:39:23 +02:00
|
|
|
export default class EditableTagRendering extends Toggle {
|
2020-10-27 01:01:34 +01:00
|
|
|
|
|
|
|
constructor(tags: UIEventSource<any>,
|
|
|
|
configuration: TagRenderingConfig) {
|
|
|
|
|
2021-06-14 02:39:23 +02:00
|
|
|
const editMode = new UIEventSource<boolean>(false);
|
2020-10-27 01:01:34 +01:00
|
|
|
|
2021-06-14 02:39:23 +02:00
|
|
|
const answer: BaseUIElement = new TagRenderingAnswer(tags, configuration)
|
|
|
|
let rendering = answer;
|
2020-10-27 01:01:34 +01:00
|
|
|
|
2021-06-14 02:39:23 +02:00
|
|
|
if (configuration.question !== undefined && State.state?.featureSwitchUserbadge?.data) {
|
|
|
|
// We have a question and editing is enabled
|
|
|
|
const editButton =
|
|
|
|
new Combine([Svg.pencil_ui()]).SetClass("block relative h-10 w-10 p-2 float-right").SetStyle("border: 1px solid black; border-radius: 0.7em")
|
|
|
|
.onClick(() => {
|
|
|
|
editMode.setData(true);
|
|
|
|
});
|
2020-10-27 01:01:34 +01:00
|
|
|
|
2021-01-06 01:11:07 +01:00
|
|
|
|
2021-06-14 02:39:23 +02:00
|
|
|
const answerWithEditButton = new Combine([answer,
|
|
|
|
new Toggle(editButton, undefined, State.state.osmConnection.isLoggedIn)]).SetClass("w-full")
|
|
|
|
|
2021-01-06 01:11:07 +01:00
|
|
|
|
2020-10-27 01:01:34 +01:00
|
|
|
const cancelbutton =
|
|
|
|
Translations.t.general.cancel.Clone()
|
2021-01-24 22:20:40 +01:00
|
|
|
.SetClass("btn btn-secondary mr-3")
|
2020-10-27 01:01:34 +01:00
|
|
|
.onClick(() => {
|
2021-06-14 02:39:23 +02:00
|
|
|
editMode.setData(false)
|
2020-10-27 01:01:34 +01:00
|
|
|
});
|
|
|
|
|
2021-06-14 02:39:23 +02:00
|
|
|
const question = new TagRenderingQuestion(tags, configuration,
|
2020-10-27 01:01:34 +01:00
|
|
|
() => {
|
2021-06-14 02:39:23 +02:00
|
|
|
editMode.setData(false)
|
2020-10-27 01:01:34 +01:00
|
|
|
},
|
|
|
|
cancelbutton)
|
2021-06-14 02:39:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
rendering = new Toggle(
|
|
|
|
question,
|
|
|
|
answerWithEditButton,
|
|
|
|
editMode
|
|
|
|
)
|
2020-10-27 01:01:34 +01:00
|
|
|
}
|
2021-06-14 02:39:23 +02:00
|
|
|
answer.SetClass("flex w-full break-word justify-between text-default landscape:w-1/2 landscape:p-2 pb-2 border-b border-gray-300 mb-2")
|
|
|
|
rendering.SetClass("flex m-1 p-1 border-b border-gray-300 mb-2 pb-2")
|
|
|
|
// The tagrendering is hidden if:
|
|
|
|
// The answer is unknown. The questionbox will then show the question
|
|
|
|
// There is a condition hiding the answer
|
|
|
|
const renderingIsShown = tags.map(tags =>
|
|
|
|
!configuration.IsKnown(tags) &&
|
|
|
|
(configuration?.condition?.matchesProperties(tags) ?? true))
|
|
|
|
super(
|
|
|
|
rendering,
|
|
|
|
undefined,
|
|
|
|
renderingIsShown
|
|
|
|
)
|
2020-10-27 01:01:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|