Parcourir la source

forgot two morelink-related files

Adam Shaw il y a 4 ans
Parent
commit
0da2b5cddf

+ 64 - 0
packages/daygrid/src/TableCellMoreLink.tsx

@@ -0,0 +1,64 @@
+import {
+  createElement,
+  MoreLinkRoot,
+  RefObject,
+  BaseComponent,
+  memoize,
+  DateMarker,
+} from '@fullcalendar/common'
+import { TableSegPlacement } from './event-placement'
+import { TableSeg } from './TableSeg'
+
+export interface TableCellMoreLinkProps {
+  allDayDate: DateMarker
+  singlePlacements: TableSegPlacement[]
+  marginTop: number
+  positionElRef: RefObject<HTMLElement>
+}
+
+export class TableCellMoreLink extends BaseComponent<TableCellMoreLinkProps> {
+  compileSegs = memoize(compileSegs)
+
+  render(props: TableCellMoreLinkProps) {
+    let { allSegs, hiddenSegs } = this.compileSegs(props.singlePlacements)
+
+    return Boolean(hiddenSegs.length) && (
+      <div className="fc-daygrid-day-bottom" style={{ marginTop: props.marginTop }}>
+        <MoreLinkRoot
+          allDayDate={props.allDayDate}
+          allSegs={allSegs}
+          hiddenSegs={hiddenSegs}
+          positionElRef={props.positionElRef}
+        >
+          {(rootElRef, classNames, innerElRef, innerContent, handleClick) => (
+            <a
+              ref={rootElRef}
+              className={['fc-daygrid-more-link'].concat(classNames).join(' ')}
+              onClick={handleClick}
+            >
+              {innerContent}
+            </a>
+          )}
+        </MoreLinkRoot>
+      </div>
+    )
+  }
+}
+
+function compileSegs(singlePlacements: TableSegPlacement[]): {
+  allSegs: TableSeg[]
+  hiddenSegs: TableSeg[]
+} {
+  let allSegs: TableSeg[] = []
+  let hiddenSegs: TableSeg[] = []
+
+  for (let placement of singlePlacements) {
+    allSegs.push(placement.seg)
+
+    if (!placement.isVisible) {
+      hiddenSegs.push(placement.seg)
+    }
+  }
+
+  return { allSegs, hiddenSegs }
+}

+ 47 - 0
packages/timegrid/src/TimeColMoreLink.tsx

@@ -0,0 +1,47 @@
+import {
+  createElement, MoreLinkContentArg, MoreLinkRoot, BaseComponent, createRef, setRef,
+} from '@fullcalendar/common'
+import { TimeColsSeg } from './TimeColsSeg'
+
+export interface TimeColMoreLinkProps {
+  hiddenSegs: TimeColsSeg[]
+  top: number
+  bottom: number
+}
+
+export class TimeColMoreLink extends BaseComponent<TimeColMoreLinkProps> {
+  rootElRef = createRef<HTMLElement>()
+
+  render(props: TimeColMoreLinkProps) {
+    return (
+      <MoreLinkRoot
+        allDayDate={null}
+        allSegs={props.hiddenSegs}
+        hiddenSegs={props.hiddenSegs}
+        positionElRef={this.rootElRef}
+        defaultContent={renderMoreLinkInner}
+      >
+        {(rootElRef, classNames, innerElRef, innerContent, handleClick) => (
+          <a
+            ref={(el: HTMLElement | null) => {
+              setRef(rootElRef, el)
+              setRef(this.rootElRef, el)
+            }}
+            className={['fc-timegrid-event-more'].concat(classNames).join(' ')}
+            style={{ top: props.top, bottom: props.bottom }}
+            onClick={handleClick}
+          >
+            <div ref={innerElRef} className="fc-timegrid-event-more-inner fc-sticky">
+              {innerContent}
+            </div>
+          </a>
+        )}
+      </MoreLinkRoot>
+    )
+  }
+}
+
+function renderMoreLinkInner(props: MoreLinkContentArg) {
+  return props.shortText
+}
+