omii-ui
Version:
使用OMII开发的WebComponents库,样式采用bootstrap。可以作为标准的esmodule使用
197 lines (184 loc) • 5.09 kB
JSX
const { h, classNames } = omii;
import uiBase from "../uiBase";
import css from "./index.scss";
/**
*
* Pager.first、last、prev、next 可以填充到指定位置
*/
export default class extends uiBase {
static css = css;
static propTypes = {
pageNum: Number,
pageCount: Number,
pageSize: Number,
total: Number,
showMore: Boolean,
};
static defaultProps = {
pageNum: 1,
pageCount: 10,
pageSize: 10, //每頁條數,和total配合
linksCount: 10,
showMore: true,
prev: <oi-icon name="keyboard_arrow_left" />,
next: <oi-icon name="keyboard_arrow_right" />,
first: <oi-icon name="first_page" />,
last: <oi-icon name="last_page" />,
createPrev(settings, pager) {
let { pageNum, prev } = settings;
return (
<div
class={classNames("prev", { disable: pageNum <= 1 })}
onClick={(evt) => {
if (pageNum > 1) pager.goto(pageNum - 1);
}}
>
{prev}
</div>
);
},
createNext(settings, pager) {
let { pageNum, next } = settings;
let { pageCount } = pager;
return (
<div
class={classNames("next", { disable: pageNum >= pageCount })}
onClick={(evt) => {
if (pageCount > pageNum) pager.goto(pageNum + 1);
}}
>
{next}
</div>
);
},
createFirst(settings, pager) {
let { first, pageNum } = settings;
return (
<div
class={classNames("first", { disable: pageNum <= 1 })}
onClick={(evt) => {
if (pageNum != 1) pager.goto(1);
}}
>
{first}
</div>
);
},
createLast(settings, pager) {
let { last, pageNum } = settings;
let { pageCount } = pager;
return (
<div
class={classNames("last", { disable: pageNum >= pageCount })}
onClick={(evt) => {
if (pageNum != pageCount) pager.goto(pageCount);
}}
>
{last}
</div>
);
},
createPages(settings, pager) {
let { linksCount, pageNum } = settings;
let { pageCount } = pager;
let half = Math.ceil(linksCount / 2);
let left = pageNum > half ? pageNum - half : 1;
let right = left + linksCount - 1;
if (right > pageCount) right = pageCount;
left = right - linksCount + 1;
let $links = [];
if (left < 1) left = 1;
for (let i = left; i <= right; i++) {
$links.push(
<div
className={classNames({ active: pageNum == i, page: true })}
onClick={(evt) => {
if (pageNum != i) pager.goto(i);
}}
>
{i}
</div>
);
}
return $links;
},
createInfo(settings, pager) {
let { pageNum } = settings;
let { pageCount } = pager;
return (
<div class="info">
<span class="curr">{pageNum}</span>/
<span class="total">{pageCount}</span>
</div>
);
},
createJumper(settings, pager) {
return (
<div class="jumper">
前往
<input
class="jump-to"
title={`请输入1-${pager.pageCount}的数字`}
type="number"
min="1"
max={pager.pageCount}
onChange={(evt) => {
let $jumpTo = evt.currentTarget;
let num = Number($jumpTo.value);
if (num > pager.pageCount) $jumpTo.value = pager.pageCount;
if (num < 1) $jumpTo.value = 1;
num = Number($jumpTo.value);
pager.goto(num);
}}
/>
页
</div>
);
},
createLayout(settings, pager) {
let {
createFirst,
createPrev,
createPages,
createNext,
createLast,
createJumper,
createInfo,
} = settings;
return (
<div class="pager">
{createFirst(settings, pager)}
{createPrev(settings, pager)}
{createPages(settings, pager)}
{createNext(settings, pager)}
{createLast(settings, pager)}
{createJumper(settings, pager)}
{createInfo(settings, pager)}
</div>
);
},
};
get currPageNum() {
return this.$props.pageNum;
}
get pageCount() {
let { total, pageSize, pageCount } = this.$props;
if ((total || total === 0) && pageSize) {
return Math.ceil(total / pageSize);
}
return pageCount;
}
goto(pageNum) {
let { pageCount } = this.$props;
if (pageNum >= 1 || pageNum < pageCount) {
this.update$Props({
pageNum,
}).then(() => {
this.fire("paged", pageNum);
});
}
}
render(settings) {
return settings.createLayout(settings, this);
}
}