import Utils from '../utils/utils';
import Mixins from '../utils/mixins';
/* phenome-dts-imports
import { Stepper as StepperNamespace } from 'framework7/components/stepper/stepper';
*/
/* phenome-dts-instance
f7Stepper: StepperNamespace.Stepper
*/
export default {
name: 'f7-stepper',
props: {
id: [String, Number],
className: String, // phenome-react-line
style: Object, // phenome-react-line
init: {
type: Boolean,
default: true,
},
value: {
type: Number,
default: 0,
},
min: {
type: Number,
default: 0,
},
max: {
type: Number,
default: 100,
},
step: {
type: Number,
default: 1,
},
formatValue: Function,
input: {
type: Boolean,
default: true,
},
inputType: {
type: String,
default: 'text',
},
inputReadonly: {
type: Boolean,
default: false,
},
autorepeat: {
type: Boolean,
default: false,
},
autorepeatDynamic: {
type: Boolean,
default: false,
},
wraps: {
type: Boolean,
default: false,
},
manualInputMode: {
type: Boolean,
default: false,
},
decimalPoint: {
type: Number,
default: 4,
},
buttonsEndInputMode: {
type: Boolean,
default: true,
},
disabled: Boolean,
buttonsOnly: Boolean,
round: Boolean,
roundMd: Boolean,
roundIos: Boolean,
fill: Boolean,
fillMd: Boolean,
fillIos: Boolean,
big: Boolean,
bigMd: Boolean,
bigIos: Boolean,
small: Boolean,
smallMd: Boolean,
smallIos: Boolean,
raised: Boolean,
...Mixins.colorProps,
},
render() {
const self = this;
const props = self.props;
const {
input, buttonsOnly, inputType, value, inputReadonly, min, max, step, id, style,
} = props;
let inputWrapEl;
let valueEl;
if (input && !buttonsOnly) {
let inputEl;
if (process.env.COMPILER === 'react') {
inputEl = (
);
}
if (process.env.COMPILER === 'vue') {
inputEl = (
);
}
inputWrapEl = (
{inputEl}
);
}
if (!input && !buttonsOnly) {
valueEl = (
{value}
);
}
return (
);
},
computed: {
classes() {
const self = this;
const props = self.props;
const {
round,
roundIos,
roundMd,
fill,
fillIos,
fillMd,
big,
bigIos,
bigMd,
small,
smallIos,
smallMd,
raised,
disabled,
} = props;
return Utils.classNames(
self.props.className,
'stepper',
{
disabled,
'stepper-round': round,
'stepper-round-ios': roundIos,
'stepper-round-md': roundMd,
'stepper-fill': fill,
'stepper-fill-ios': fillIos,
'stepper-fill-md': fillMd,
'stepper-big': big,
'stepper-big-ios': bigIos,
'stepper-big-md': bigMd,
'stepper-small': small,
'stepper-small-ios': smallIos,
'stepper-small-md': smallMd,
'stepper-raised': raised,
},
Mixins.colorClasses(props),
);
},
},
componentDidCreate() {
this.onInput = this.onInput.bind(this);
this.onMinusClick = this.onMinusClick.bind(this);
this.onPlusClick = this.onPlusClick.bind(this);
},
componentDidMount() {
const self = this;
const { minusEl, plusEl } = self.refs;
if (minusEl) {
minusEl.addEventListener('click', self.onMinusClick);
}
if (plusEl) {
plusEl.addEventListener('click', self.onPlusClick);
}
if (!self.props.init) return;
self.$f7ready((f7) => {
const {
min, max, value, step, formatValue, autorepeat, autorepeatDynamic, wraps, manualInputMode, decimalPoint, buttonsEndInputMode,
} = self.props;
const el = self.refs.el;
if (!el) return;
self.f7Stepper = f7.stepper.create(Utils.noUndefinedProps({
el,
min,
max,
value,
step,
formatValue,
autorepeat,
autorepeatDynamic,
wraps,
manualInputMode,
decimalPoint,
buttonsEndInputMode,
on: {
change(stepper, newValue) {
self.dispatchEvent('stepper:change stepperChange', newValue);
},
},
}));
});
},
componentWillUnmount() {
const self = this;
const { minusEl, plusEl } = self.refs;
if (minusEl) {
minusEl.removeEventListener('click', self.onMinusClick);
}
if (plusEl) {
plusEl.removeEventListener('click', self.onPlusClick);
}
if (!self.props.init) return;
if (self.f7Stepper && self.f7Stepper.destroy) {
self.f7Stepper.destroy();
}
},
methods: {
increment() {
if (!this.f7Stepper) return;
this.f7Stepper.increment();
},
decrement() {
if (!this.f7Stepper) return;
this.f7Stepper.decrement();
},
setValue(newValue) {
const self = this;
if (self.f7Stepper && self.f7Stepper.setValue) self.f7Stepper.setValue(newValue);
},
getValue() {
const self = this;
if (self.f7Stepper && self.f7Stepper.getValue) {
return self.f7Stepper.getValue();
}
return undefined;
},
onInput(event) {
const stepper = this.f7Stepper;
this.dispatchEvent('input', event, stepper);
},
onMinusClick(event) {
const stepper = this.f7Stepper;
this.dispatchEvent('stepper:minusclick stepperMinusClick', event, stepper);
},
onPlusClick(event) {
const stepper = this.f7Stepper;
this.dispatchEvent('stepper:plusclick stepperPlusClick', event, stepper);
},
},
};