@fortawesome/free-solid-svg-icons#faCaretUp TypeScript Examples
The following examples show how to use
@fortawesome/free-solid-svg-icons#faCaretUp.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: shared.module.ts From enterprise-ng-2020-workshop with MIT License | 6 votes |
constructor(faIconLibrary: FaIconLibrary) {
faIconLibrary.addIcons(
faGithub,
faMediumM,
faPlus,
faEdit,
faTrash,
faTimes,
faCaretUp,
faCaretDown,
faExclamationTriangle,
faFilter,
faTasks,
faCheck,
faSquare,
faLanguage,
faPaintBrush,
faLightbulb,
faWindowMaximize,
faStream,
faBook
);
}
Example #2
Source File: index.tsx From prism-frontend with MIT License | 4 votes |
function DateSelector({ availableDates = [], classes }: DateSelectorProps) {
const { startDate: stateStartDate } = useSelector(dateRangeSelector);
const { t, i18n } = useSafeTranslation();
const [dateRange, setDateRange] = useState<DateRangeType[]>([
{
value: 0,
label: '',
month: '',
isFirstDay: false,
},
]);
const [timelinePosition, setTimelinePosition] = useState<Point>({
x: 0,
y: 0,
});
const [pointerPosition, setPointerPosition] = useState<Point>({ x: 0, y: 0 });
const dateRef = useRef(availableDates);
const timeLine = useRef(null);
const timeLineWidth = get(timeLine.current, 'offsetWidth', 0);
const { updateHistory } = useUrlHistory();
// Move the slider automatically so that the pointer always visible
useEffect(() => {
let x = 0;
if (
pointerPosition.x >=
dateRange.length * TIMELINE_ITEM_WIDTH - timeLineWidth
) {
// eslint-disable-next-line fp/no-mutation
x = timeLineWidth - dateRange.length * TIMELINE_ITEM_WIDTH;
} else if (pointerPosition.x > timeLineWidth) {
// eslint-disable-next-line fp/no-mutation
x = -pointerPosition.x + timeLineWidth / 2;
}
if (
-timelinePosition.x > pointerPosition.x ||
-timelinePosition.x + timeLineWidth < pointerPosition.x
) {
setTimelinePosition({ x, y: 0 });
}
}, [dateRange.length, pointerPosition, timeLineWidth, timelinePosition.x]);
// Create timeline range and set pointer position
useEffect(() => {
const locale = t('date_locale') ? t('date_locale') : 'en';
const range = Array.from(
moment()
.range(
moment(stateStartDate).startOf('year'),
moment(stateStartDate).endOf('year'),
)
.by('days'),
).map(date => {
date.locale(locale);
return {
value: date.valueOf(),
label: date.format(MONTH_FIRST_DATE_FORMAT),
month: date.format(MONTH_ONLY_DATE_FORMAT),
isFirstDay: date.date() === date.startOf('month').date(),
};
});
setDateRange(range);
const dateIndex = findIndex(range, date => {
return (
date.label ===
moment(stateStartDate).locale(locale).format(MONTH_FIRST_DATE_FORMAT)
);
});
setPointerPosition({
x: dateIndex * TIMELINE_ITEM_WIDTH,
y: 0,
});
}, [stateStartDate, t, i18n]);
function updateStartDate(date: Date) {
const time = date.getTime();
// This updates state because a useEffect in MapView updates the redux state
// TODO this is convoluted coupling, we should update state here if feasible.
updateHistory('date', moment(time).format(DEFAULT_DATE_FORMAT));
}
function setDatePosition(date: number | undefined, increment: number) {
const dates = availableDates.map(d => {
return d + USER_DATE_OFFSET;
});
const selectedIndex = findDateIndex(dates, date);
if (dates[selectedIndex + increment]) {
updateStartDate(new Date(dates[selectedIndex + increment]));
}
}
// move pointer to closest date when change map layer
useEffect(() => {
if (!isEqual(dateRef.current, availableDates)) {
setDatePosition(stateStartDate, 0);
dateRef.current = availableDates;
}
});
function incrementDate() {
setDatePosition(stateStartDate, 1);
}
function decrementDate() {
setDatePosition(stateStartDate, -1);
}
// Click on available date to move the pointer
const clickDate = (index: number) => {
const dates = availableDates.map(date => {
return date + USER_DATE_OFFSET;
});
const selectedIndex = findDateIndex(dates, dateRange[index].value);
if (selectedIndex >= 0 && dates[selectedIndex] !== stateStartDate) {
setPointerPosition({ x: index * TIMELINE_ITEM_WIDTH, y: 0 });
updateStartDate(new Date(dates[selectedIndex]));
}
};
// Set timeline position after being dragged
const onTimelineStop = (e: DraggableEvent, position: Point) => {
setTimelinePosition(position);
};
// Set pointer position after being dragged
const onPointerStop = (e: DraggableEvent, position: Point) => {
const exactX = Math.round(position.x / TIMELINE_ITEM_WIDTH);
if (exactX >= dateRange.length) {
return;
}
const dates = availableDates.map(date => {
return date + USER_DATE_OFFSET;
});
const selectedIndex = findDateIndex(dates, dateRange[exactX].value);
if (selectedIndex >= 0 && dates[selectedIndex] !== stateStartDate) {
setPointerPosition({ x: exactX * TIMELINE_ITEM_WIDTH, y: position.y });
updateStartDate(new Date(dates[selectedIndex]));
}
};
return (
<div className={classes.container}>
<Grid
container
alignItems="center"
justify="center"
className={classes.datePickerContainer}
>
<Grid item xs={12} sm={1} className={classes.datePickerGrid}>
<Hidden smUp>
<Button onClick={decrementDate}>
<ChevronLeft />
</Button>
</Hidden>
<DatePicker
locale={t('date_locale')}
dateFormat="PP"
className={classes.datePickerInput}
selected={moment(stateStartDate).toDate()}
onChange={updateStartDate}
maxDate={new Date()}
todayButton={t('Today')}
peekNextMonth
showMonthDropdown
showYearDropdown
dropdownMode="select"
customInput={<Input />}
includeDates={availableDates.map(
d => new Date(d + USER_DATE_OFFSET),
)}
/>
<Hidden smUp>
<Button onClick={incrementDate}>
<ChevronRight />
</Button>
</Hidden>
</Grid>
<Grid item xs={12} sm className={classes.slider}>
<Hidden xsDown>
<Button onClick={decrementDate}>
<ChevronLeft />
</Button>
</Hidden>
<Grid className={classes.dateContainer} ref={timeLine}>
<Draggable
axis="x"
handle={`#${TIMELINE_ID}`}
bounds={{
top: 0,
bottom: 0,
right: 0,
left: timeLineWidth - dateRange.length * TIMELINE_ITEM_WIDTH,
}}
position={timelinePosition}
onStop={onTimelineStop}
>
<div className={classes.timeline} id={TIMELINE_ID}>
<Grid
container
alignItems="stretch"
className={classes.dateLabelContainer}
>
<TimelineItems
dateRange={dateRange}
availableDates={availableDates}
clickDate={clickDate}
/>
</Grid>
<Draggable
axis="x"
handle={`#${POINTER_ID}`}
bounds={{
top: 0,
bottom: 0,
left: 0,
right: dateRange.length * TIMELINE_ITEM_WIDTH,
}}
grid={[TIMELINE_ITEM_WIDTH, 1]}
position={pointerPosition}
onStart={(e: DraggableEvent) => e.stopPropagation()}
onStop={onPointerStop}
>
<div className={classes.pointer} id={POINTER_ID}>
<FontAwesomeIcon
icon={faCaretUp}
style={{ fontSize: 40 }}
color="white"
/>
</div>
</Draggable>
</div>
</Draggable>
</Grid>
<Hidden xsDown>
<Button onClick={incrementDate}>
<ChevronRight />
</Button>
</Hidden>
</Grid>
</Grid>
</div>
);
}