Support editing HTML

This commit is contained in:
Hillel Coren 2021-05-30 13:34:27 +03:00
parent 159d990d3e
commit cbaf01ccb7
1 changed files with 37 additions and 1 deletions

View File

@ -44,8 +44,10 @@ class _DesignEditState extends State<DesignEdit>
GlobalKey<FormState>(debugLabel: '_designEdit');
final _debouncer = Debouncer(milliseconds: kMillisecondsToDebounceSave);
final _htmlDebouncer = Debouncer();
final _nameController = TextEditingController();
final _htmlController = TextEditingController();
final _headerController = TextEditingController();
final _footerController = TextEditingController();
final _bodyController = TextEditingController();
@ -65,6 +67,7 @@ class _DesignEditState extends State<DesignEdit>
@override
void initState() {
super.initState();
_htmlController.addListener(_onHtmlChanged);
_focusNode = FocusScopeNode();
_tabController = TabController(
vsync: this, length: widget.viewModel.state.prefState.isMobile ? 7 : 6);
@ -106,6 +109,10 @@ class _DesignEditState extends State<DesignEdit>
void dispose() {
_focusNode.dispose();
_tabController.dispose();
_htmlController.removeListener(_onHtmlChanged);
_htmlController.dispose();
_controllers.forEach((controller) {
controller.removeListener(_onChanged);
controller.dispose();
@ -140,6 +147,14 @@ class _DesignEditState extends State<DesignEdit>
});
}
void _onHtmlChanged() {
_htmlDebouncer.run(() {
setState(() {
_html = _htmlController.text;
});
});
}
void _loadDesign(DesignEntity design) {
_controllers.forEach((controller) => controller.removeListener(_onChanged));
@ -175,6 +190,7 @@ class _DesignEditState extends State<DesignEdit>
if (response != null) {
if (_isDraftMode) {
_htmlController.text = response.body;
_html = response.body;
_pdfBytes = null;
} else {
@ -249,6 +265,7 @@ class _DesignEditState extends State<DesignEdit>
viewModel: viewModel,
isLoading: _isLoading,
nameController: _nameController,
htmlController: _htmlController,
onLoadDesign: _loadDesign,
draftMode: _isDraftMode,
onDraftModeChanged: (value) => _setDraftMode(value),
@ -298,6 +315,7 @@ class _DesignEditState extends State<DesignEdit>
viewModel: viewModel,
isLoading: _isLoading,
nameController: _nameController,
htmlController: _htmlController,
onLoadDesign: _loadDesign,
draftMode: _isDraftMode,
onDraftModeChanged: (value) =>
@ -370,6 +388,7 @@ class DesignSettings extends StatefulWidget {
const DesignSettings({
@required this.viewModel,
@required this.nameController,
@required this.htmlController,
@required this.onLoadDesign,
@required this.draftMode,
@required this.onDraftModeChanged,
@ -379,6 +398,7 @@ class DesignSettings extends StatefulWidget {
final DesignEditVM viewModel;
final Function(DesignEntity) onLoadDesign;
final TextEditingController nameController;
final TextEditingController htmlController;
final bool draftMode;
final bool isLoading;
final Function(bool) onDraftModeChanged;
@ -438,7 +458,23 @@ class _DesignSettingsState extends State<DesignSettings> {
launch('https://invoiceninja.github.io/docs/custom-fields/'),
),
),
VariablesHelp(),
if (widget.draftMode)
FormCard(
child: TextField(
controller: widget.htmlController,
keyboardType: TextInputType.multiline,
minLines: 16,
maxLines: null,
decoration: InputDecoration(
border: InputBorder.none,
),
style: TextStyle(
fontFeatures: [FontFeature.tabularFigures()],
),
),
)
else
VariablesHelp(),
],
);
}