@iblai/mcp 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-info.d.ts","sourceRoot":"","sources":["../../src/tools/component-info.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAc7B,CAAC;
|
|
1
|
+
{"version":3,"file":"component-info.d.ts","sourceRoot":"","sources":["../../src/tools/component-info.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAc7B,CAAC;AAqiFF,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAgD9D"}
|
|
@@ -1356,6 +1356,61 @@ interface UserProfileModalProps {
|
|
|
1356
1356
|
> **Import from \`@iblai/iblai-js/web-containers/next\`** — requires Next.js
|
|
1357
1357
|
|
|
1358
1358
|
**File Location**: \`packages/web-containers/src/components/modals/user-profile-modal.tsx\``,
|
|
1359
|
+
PaywallModal: `# PaywallModal Component
|
|
1360
|
+
|
|
1361
|
+
Stripe-powered paywall dialog that lists available pricing tiers and creates a Stripe Checkout session for the selected price.
|
|
1362
|
+
|
|
1363
|
+
\`\`\`typescript
|
|
1364
|
+
import { PaywallModal } from '@iblai/iblai-js/web-containers';
|
|
1365
|
+
import type { PaywallPrice } from '@iblai/data-layer';
|
|
1366
|
+
|
|
1367
|
+
interface PaywallModalProps {
|
|
1368
|
+
pricing: {
|
|
1369
|
+
item_name: string;
|
|
1370
|
+
prices: PaywallPrice[];
|
|
1371
|
+
};
|
|
1372
|
+
platformKey: string;
|
|
1373
|
+
itemId: string;
|
|
1374
|
+
itemType: string; // 'mentor' | 'course' | 'program' | 'pathway'
|
|
1375
|
+
open: boolean;
|
|
1376
|
+
onClose: () => void;
|
|
1377
|
+
closable?: boolean; // default true; when false hides close button and blocks escape/outside-click
|
|
1378
|
+
buttonClassName?: string;
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
<PaywallModal
|
|
1382
|
+
pricing={{ item_name: 'Premium Mentor', prices: paywall.prices }}
|
|
1383
|
+
platformKey={tenantKey}
|
|
1384
|
+
itemId={mentorId}
|
|
1385
|
+
itemType="mentor"
|
|
1386
|
+
open={isOpen}
|
|
1387
|
+
onClose={() => setIsOpen(false)}
|
|
1388
|
+
/>
|
|
1389
|
+
\`\`\`
|
|
1390
|
+
|
|
1391
|
+
Wires \`useCreateCheckoutMutation\` from \`@iblai/data-layer\` to redirect to Stripe Checkout. The grid auto-sizes for 1, 2, 3, or 4+ prices.
|
|
1392
|
+
|
|
1393
|
+
**File Location**: \`packages/web-containers/src/components/modals/paywall-modal.tsx\``,
|
|
1394
|
+
AnalyticsMonetizationStats: `# AnalyticsMonetizationStats Component
|
|
1395
|
+
|
|
1396
|
+
Analytics dashboard tab showing monetization KPIs (revenue, sales count, active paywalls, subscriber count), distribution charts, and paginated subscriber/paywall tables.
|
|
1397
|
+
|
|
1398
|
+
\`\`\`typescript
|
|
1399
|
+
import { AnalyticsMonetizationStats } from '@iblai/iblai-js/web-containers';
|
|
1400
|
+
|
|
1401
|
+
interface AnalyticsMonetizationStatsProps {
|
|
1402
|
+
tenantKey: string;
|
|
1403
|
+
mentorId: string;
|
|
1404
|
+
selectedMentorId?: string;
|
|
1405
|
+
usergroupIds?: number[];
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
<AnalyticsMonetizationStats tenantKey={tenantKey} mentorId={mentorId} />
|
|
1409
|
+
\`\`\`
|
|
1410
|
+
|
|
1411
|
+
Internally uses the \`useMonetization\` hook (from \`@web-containers/components/analytics/use-monetization\`) which composes \`useGetRevenueQuery\`, \`useListPaywallsQuery\`, and \`useListSubscribersQuery\` from \`@iblai/data-layer\`. Renders pie charts via \`recharts\` and supports filtering by subscriber status and paywall item type.
|
|
1412
|
+
|
|
1413
|
+
**File Location**: \`packages/web-containers/src/components/analytics/analytics-monetization-stats.tsx\``,
|
|
1359
1414
|
SsoLogin: `# SsoLogin Component
|
|
1360
1415
|
|
|
1361
1416
|
SSO callback handler for authentication.
|
|
@@ -1735,6 +1790,684 @@ interface WorkflowSidebarProps {
|
|
|
1735
1790
|
\`\`\`
|
|
1736
1791
|
|
|
1737
1792
|
**File Location**: \`packages/web-containers/src/components/workflows/workflow-sidebar.tsx\``,
|
|
1793
|
+
// ============================================================================
|
|
1794
|
+
// SKILLS-PROFILE COMPONENTS (from Skills SPA)
|
|
1795
|
+
// ============================================================================
|
|
1796
|
+
SkeletonMultiplier: `# SkeletonMultiplier Component
|
|
1797
|
+
|
|
1798
|
+
Renders any Skeleton component N times. Useful for loading lists of cards/rows.
|
|
1799
|
+
|
|
1800
|
+
\`\`\`typescript
|
|
1801
|
+
import { SkeletonMultiplier } from '@iblai/iblai-js/web-containers';
|
|
1802
|
+
|
|
1803
|
+
interface SkeletonMultiplierProps {
|
|
1804
|
+
Skeleton: React.ElementType;
|
|
1805
|
+
multiplier: number;
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
<SkeletonMultiplier Skeleton={CourseCardSkeleton} multiplier={6} />
|
|
1809
|
+
\`\`\`
|
|
1810
|
+
|
|
1811
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skeleton-multiplier.tsx\``,
|
|
1812
|
+
SkeletonActivityStatBox: `# SkeletonActivityStatBox Component
|
|
1813
|
+
|
|
1814
|
+
Loading placeholder for a single activity stat tile (value + label) on the profile activity page.
|
|
1815
|
+
|
|
1816
|
+
\`\`\`typescript
|
|
1817
|
+
import { SkeletonActivityStatBox } from '@iblai/iblai-js/web-containers';
|
|
1818
|
+
|
|
1819
|
+
<SkeletonActivityStatBox />
|
|
1820
|
+
\`\`\`
|
|
1821
|
+
|
|
1822
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skeleton-activity-stat-box.tsx\``,
|
|
1823
|
+
CourseCardSkeleton: `# CourseCardSkeleton Component
|
|
1824
|
+
|
|
1825
|
+
Loading placeholder for a course card with shimmer overlay, image block, title lines and action buttons.
|
|
1826
|
+
|
|
1827
|
+
\`\`\`typescript
|
|
1828
|
+
import { CourseCardSkeleton } from '@iblai/iblai-js/web-containers';
|
|
1829
|
+
|
|
1830
|
+
<CourseCardSkeleton />
|
|
1831
|
+
\`\`\`
|
|
1832
|
+
|
|
1833
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/course-card-skeleton.tsx\``,
|
|
1834
|
+
DefaultEmptyBox: `# DefaultEmptyBox Component
|
|
1835
|
+
|
|
1836
|
+
Reusable empty-state box with an icon and message. Framework-agnostic (uses a plain img tag).
|
|
1837
|
+
|
|
1838
|
+
\`\`\`typescript
|
|
1839
|
+
import { DefaultEmptyBox } from '@iblai/iblai-js/web-containers';
|
|
1840
|
+
|
|
1841
|
+
interface DefaultEmptyBoxProps {
|
|
1842
|
+
image?: string; // defaults to '/images/empty-data-icon.svg'
|
|
1843
|
+
message?: string; // defaults to 'No data available'
|
|
1844
|
+
imageSize?: number; // defaults to 40
|
|
1845
|
+
bordered?: boolean; // defaults to true
|
|
1846
|
+
className?: string;
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1849
|
+
<DefaultEmptyBox message="No credentials yet" />
|
|
1850
|
+
<DefaultEmptyBox bordered={false} image="/icons/empty-skills.svg" />
|
|
1851
|
+
\`\`\`
|
|
1852
|
+
|
|
1853
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/default-empty-box.tsx\``,
|
|
1854
|
+
ProfileTabs: `# ProfileTabs Component
|
|
1855
|
+
|
|
1856
|
+
Horizontal scrollable tab bar for the profile section of the Skills SPA. Uses next/link and next/navigation — import from the \`/next\` entry point.
|
|
1857
|
+
|
|
1858
|
+
\`\`\`typescript
|
|
1859
|
+
import { ProfileTabs } from '@iblai/iblai-js/web-containers/next';
|
|
1860
|
+
|
|
1861
|
+
interface ProfileTabItem {
|
|
1862
|
+
name: string;
|
|
1863
|
+
href: string;
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
interface ProfileTabsProps {
|
|
1867
|
+
tabs?: ProfileTabItem[]; // defaults to the skills SPA tab set
|
|
1868
|
+
basePath?: string; // defaults to '/profile'
|
|
1869
|
+
}
|
|
1870
|
+
|
|
1871
|
+
// Default skills profile tabs
|
|
1872
|
+
<ProfileTabs />
|
|
1873
|
+
|
|
1874
|
+
// Custom tabs
|
|
1875
|
+
<ProfileTabs
|
|
1876
|
+
basePath="/profile"
|
|
1877
|
+
tabs={[
|
|
1878
|
+
{ name: 'Activity', href: '/profile' },
|
|
1879
|
+
{ name: 'Skills', href: '/profile/skills' },
|
|
1880
|
+
]}
|
|
1881
|
+
/>
|
|
1882
|
+
\`\`\`
|
|
1883
|
+
|
|
1884
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/profile-tabs.tsx\``,
|
|
1885
|
+
CourseBox: `# CourseBox Component
|
|
1886
|
+
|
|
1887
|
+
Clickable course card (image + title pill) used across the Skills SPA profile/discover screens. Pure presentation — the caller resolves the image URL from their own config and passes it via props. Uses next/link + next/image, so import from the \`/next\` entry.
|
|
1888
|
+
|
|
1889
|
+
\`\`\`typescript
|
|
1890
|
+
import { CourseBox } from '@iblai/iblai-js/web-containers/next';
|
|
1891
|
+
|
|
1892
|
+
interface CourseBoxCourse {
|
|
1893
|
+
course_id: string;
|
|
1894
|
+
name: string;
|
|
1895
|
+
}
|
|
1896
|
+
|
|
1897
|
+
interface CourseBoxProps<TCourse extends CourseBoxCourse> {
|
|
1898
|
+
course: TCourse;
|
|
1899
|
+
imageSrc: string; // pre-resolved absolute URL
|
|
1900
|
+
fallbackImageSrc: string; // used on <img onError>
|
|
1901
|
+
href?: string; // defaults to \`/courses/{course_id}\`
|
|
1902
|
+
label?: string; // pill label, defaults to "course"
|
|
1903
|
+
}
|
|
1904
|
+
|
|
1905
|
+
<CourseBox
|
|
1906
|
+
course={course}
|
|
1907
|
+
imageSrc={resolveCourseImage(course)}
|
|
1908
|
+
fallbackImageSrc={getRandomCourseImage()}
|
|
1909
|
+
/>
|
|
1910
|
+
\`\`\`
|
|
1911
|
+
|
|
1912
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/course-box.tsx\``,
|
|
1913
|
+
CredentialMiniBox: `# CredentialMiniBox Component
|
|
1914
|
+
|
|
1915
|
+
Small credential tile (icon + name + course + issued date). Uses next/image so import from the \`/next\` entry.
|
|
1916
|
+
|
|
1917
|
+
\`\`\`typescript
|
|
1918
|
+
import { CredentialMiniBox } from '@iblai/iblai-js/web-containers/next';
|
|
1919
|
+
import type { Assertion } from '@iblai/iblai-api';
|
|
1920
|
+
|
|
1921
|
+
interface CredentialMiniBoxProps {
|
|
1922
|
+
credential: Assertion;
|
|
1923
|
+
onClick?: () => void;
|
|
1924
|
+
minified?: boolean;
|
|
1925
|
+
iconSize?: number;
|
|
1926
|
+
defaultImage?: string; // fallback badge icon
|
|
1927
|
+
}
|
|
1928
|
+
|
|
1929
|
+
<CredentialMiniBox credential={assertion} onClick={() => setOpen(assertion)} />
|
|
1930
|
+
\`\`\`
|
|
1931
|
+
|
|
1932
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/credential-mini-box.tsx\``,
|
|
1933
|
+
CredentialMiniBoxSkeleton: `# CredentialMiniBoxSkeleton Component
|
|
1934
|
+
|
|
1935
|
+
Loading placeholder for CredentialMiniBox.
|
|
1936
|
+
|
|
1937
|
+
\`\`\`typescript
|
|
1938
|
+
import { CredentialMiniBoxSkeleton } from '@iblai/iblai-js/web-containers';
|
|
1939
|
+
|
|
1940
|
+
<CredentialMiniBoxSkeleton />
|
|
1941
|
+
\`\`\`
|
|
1942
|
+
|
|
1943
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/credential-mini-box-skeleton.tsx\``,
|
|
1944
|
+
CredentialDetailModal: `# CredentialDetailModal Component
|
|
1945
|
+
|
|
1946
|
+
Full-screen modal showing credential badge, course, issuer, issue date and a Download button. Pure presentational — caller supplies download behaviour via \`onDownload\`.
|
|
1947
|
+
|
|
1948
|
+
\`\`\`typescript
|
|
1949
|
+
import { CredentialDetailModal } from '@iblai/iblai-js/web-containers/next';
|
|
1950
|
+
import type { CredentialDetailAssertion } from '@iblai/iblai-js/web-containers/next';
|
|
1951
|
+
|
|
1952
|
+
interface CredentialDetailModalProps {
|
|
1953
|
+
credential: CredentialDetailAssertion | null;
|
|
1954
|
+
onClose: () => void;
|
|
1955
|
+
defaultImage?: string;
|
|
1956
|
+
courseFallbackImage?: string;
|
|
1957
|
+
onDownload?: (element: HTMLDivElement | null) => void;
|
|
1958
|
+
recipientTitle?: string;
|
|
1959
|
+
}
|
|
1960
|
+
|
|
1961
|
+
<CredentialDetailModal
|
|
1962
|
+
credential={selected}
|
|
1963
|
+
onClose={() => setSelected(null)}
|
|
1964
|
+
onDownload={(el) => printElement(el)}
|
|
1965
|
+
/>
|
|
1966
|
+
\`\`\`
|
|
1967
|
+
|
|
1968
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/credential-detail-modal.tsx\``,
|
|
1969
|
+
SkillBox: `# SkillBox Component
|
|
1970
|
+
|
|
1971
|
+
Skill tile with name, circular level indicator (1-5), and star. Pure presentational — accepts any skill shape matching \`{ id?, name, level? }\`.
|
|
1972
|
+
|
|
1973
|
+
\`\`\`typescript
|
|
1974
|
+
import { SkillBox } from '@iblai/iblai-js/web-containers';
|
|
1975
|
+
|
|
1976
|
+
interface SkillBoxSkill {
|
|
1977
|
+
id?: string | number;
|
|
1978
|
+
name: string;
|
|
1979
|
+
level?: number;
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
<SkillBox skill={skill} onSkillClick={(s) => setSelected(s)} />
|
|
1983
|
+
<SkillBox skill={skill} showRating={false} />
|
|
1984
|
+
\`\`\`
|
|
1985
|
+
|
|
1986
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skill-box.tsx\``,
|
|
1987
|
+
SkeletonSkillBox: `# SkeletonSkillBox Component
|
|
1988
|
+
|
|
1989
|
+
Loading placeholder for SkillBox.
|
|
1990
|
+
|
|
1991
|
+
\`\`\`typescript
|
|
1992
|
+
import { SkeletonSkillBox } from '@iblai/iblai-js/web-containers';
|
|
1993
|
+
|
|
1994
|
+
<SkeletonSkillBox />
|
|
1995
|
+
\`\`\`
|
|
1996
|
+
|
|
1997
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skeleton-skill-box.tsx\``,
|
|
1998
|
+
SkillDetailModal: `# SkillDetailModal Component
|
|
1999
|
+
|
|
2000
|
+
Modal that lets the user rate their expertise in a skill on a 1-5 scale. Fully controlled via callbacks.
|
|
2001
|
+
|
|
2002
|
+
\`\`\`typescript
|
|
2003
|
+
import { SkillDetailModal } from '@iblai/iblai-js/web-containers';
|
|
2004
|
+
|
|
2005
|
+
interface SkillDetailModalProps {
|
|
2006
|
+
skill: { name: string; rating: number };
|
|
2007
|
+
updatingSkill?: boolean;
|
|
2008
|
+
deletingSkill?: boolean;
|
|
2009
|
+
onClose: () => void;
|
|
2010
|
+
onRatingChange?: (rating: number) => void;
|
|
2011
|
+
onDeleteSkill?: () => void;
|
|
2012
|
+
}
|
|
2013
|
+
|
|
2014
|
+
<SkillDetailModal
|
|
2015
|
+
skill={{ name: 'TypeScript', rating: 3 }}
|
|
2016
|
+
onClose={closeModal}
|
|
2017
|
+
onRatingChange={(r) => mutate({ rating: r })}
|
|
2018
|
+
onDeleteSkill={() => deleteSkill()}
|
|
2019
|
+
/>
|
|
2020
|
+
\`\`\`
|
|
2021
|
+
|
|
2022
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skill-detail-modal.tsx\``,
|
|
2023
|
+
SkeletonPathwayBox: `# SkeletonPathwayBox Component
|
|
2024
|
+
|
|
2025
|
+
Loading placeholder for a pathway card (also reused by the programs grid). Pure presentational.
|
|
2026
|
+
|
|
2027
|
+
\`\`\`typescript
|
|
2028
|
+
import { SkeletonPathwayBox } from '@iblai/iblai-js/web-containers';
|
|
2029
|
+
|
|
2030
|
+
<SkeletonPathwayBox />
|
|
2031
|
+
\`\`\`
|
|
2032
|
+
|
|
2033
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skeleton-pathway-box.tsx\``,
|
|
2034
|
+
UserAvatar: `# UserAvatar Component
|
|
2035
|
+
|
|
2036
|
+
Avatar for the logged-in user. Reads metadata via the shared \`useUserMetadata\` hook and falls back through profile image → Gravatar → initials.
|
|
2037
|
+
|
|
2038
|
+
\`\`\`typescript
|
|
2039
|
+
import { UserAvatar } from '@iblai/iblai-js/web-containers';
|
|
2040
|
+
|
|
2041
|
+
<UserAvatar size={48} enableGravatar={false} containerClassName="ring-2" />
|
|
2042
|
+
\`\`\`
|
|
2043
|
+
|
|
2044
|
+
Pass \`enableGravatar={false}\` for tenants that disable Gravatar. The component requires the data-layer Redux store to be available (because of useUserMetadata).
|
|
2045
|
+
|
|
2046
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/user-avatar.tsx\``,
|
|
2047
|
+
ProfileTimeChart: `# ProfileTimeChart Component
|
|
2048
|
+
|
|
2049
|
+
Presentational 7-day time-spent bar chart (recharts). Caller supplies the data and loading flag.
|
|
2050
|
+
|
|
2051
|
+
\`\`\`typescript
|
|
2052
|
+
import { ProfileTimeChart } from '@iblai/iblai-js/web-containers';
|
|
2053
|
+
import { useProfileTimeSpent } from '@iblai/iblai-js/web-containers';
|
|
2054
|
+
|
|
2055
|
+
const { timeSpent, timeSpentLoading } = useProfileTimeSpent();
|
|
2056
|
+
<ProfileTimeChart data={timeSpent} loading={timeSpentLoading} />
|
|
2057
|
+
\`\`\`
|
|
2058
|
+
|
|
2059
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/profile-time-chart.tsx\``,
|
|
2060
|
+
SkillLeaderboardChart: `# SkillLeaderboardChart Component
|
|
2061
|
+
|
|
2062
|
+
Presentational percentile/skill-points curve chart with the user's position highlighted. Pure props in.
|
|
2063
|
+
|
|
2064
|
+
\`\`\`typescript
|
|
2065
|
+
import { SkillLeaderboardChart } from '@iblai/iblai-js/web-containers';
|
|
2066
|
+
|
|
2067
|
+
<SkillLeaderboardChart userSkillPoints={250} />
|
|
2068
|
+
\`\`\`
|
|
2069
|
+
|
|
2070
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skill-leaderboard-chart.tsx\``,
|
|
2071
|
+
CustomTooltip: `# CustomTooltip Component
|
|
2072
|
+
|
|
2073
|
+
\`@internal\` — exported only so unit tests can render it in isolation. Not part of the package's public API; consumers should render \`SkillLeaderboardChart\` instead, which wires this tooltip into the underlying \`recharts\` \`<Tooltip>\`.
|
|
2074
|
+
|
|
2075
|
+
Renders a small white card showing the hovered point's level, skill points (rounded), and percentile. Returns \`null\` when \`active\` is false or \`payload\` is empty.
|
|
2076
|
+
|
|
2077
|
+
\`\`\`typescript
|
|
2078
|
+
// Shape consumed by recharts <Tooltip content={...} />
|
|
2079
|
+
interface TooltipProps {
|
|
2080
|
+
active?: boolean;
|
|
2081
|
+
payload?: Array<{
|
|
2082
|
+
value: number;
|
|
2083
|
+
payload: { percentile: number; value: number; level: string; description: string };
|
|
2084
|
+
}>;
|
|
2085
|
+
label?: string | number;
|
|
2086
|
+
}
|
|
2087
|
+
|
|
2088
|
+
// Internal usage inside SkillLeaderboardChart:
|
|
2089
|
+
<Tooltip content={<CustomTooltip />} />
|
|
2090
|
+
\`\`\`
|
|
2091
|
+
|
|
2092
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skill-leaderboard-chart.tsx\``,
|
|
2093
|
+
ProfileInfoCards: `# ProfileInfoCards Component
|
|
2094
|
+
|
|
2095
|
+
Grid of 4 profile info cards (Last Accessed, Joined, Total Time Spent, Top Content). Presentational. Uses next/link, so it ships from \`@iblai/iblai-js/web-containers/next\`.
|
|
2096
|
+
|
|
2097
|
+
\`\`\`typescript
|
|
2098
|
+
import { ProfileInfoCards } from '@iblai/iblai-js/web-containers/next';
|
|
2099
|
+
|
|
2100
|
+
<ProfileInfoCards
|
|
2101
|
+
userInfo={{ last_activity, date_joined, total_time_spent }}
|
|
2102
|
+
topContent={{ name, course_id, time_invested }}
|
|
2103
|
+
loading={isLoading}
|
|
2104
|
+
topContentLoading={topContentLoading}
|
|
2105
|
+
courseHrefTemplate="/courses/{courseId}"
|
|
2106
|
+
/>
|
|
2107
|
+
\`\`\`
|
|
2108
|
+
|
|
2109
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/profile-info-cards.tsx\``,
|
|
2110
|
+
SkeletonProfileInfoCard: `# SkeletonProfileInfoCard Component
|
|
2111
|
+
|
|
2112
|
+
Loading placeholder for a single ProfileInfoCard. Pure presentational.
|
|
2113
|
+
|
|
2114
|
+
\`\`\`typescript
|
|
2115
|
+
import { SkeletonProfileInfoCard } from '@iblai/iblai-js/web-containers';
|
|
2116
|
+
|
|
2117
|
+
<SkeletonProfileInfoCard />
|
|
2118
|
+
\`\`\`
|
|
2119
|
+
|
|
2120
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skeleton-profile-info-card.tsx\``,
|
|
2121
|
+
AddSkillDialog: `# AddSkillDialog Component
|
|
2122
|
+
|
|
2123
|
+
Debounced "add skill" search dialog. Presentational — caller wires the search and update operations via callbacks. Typically backed by \`useProfileSkills\`.
|
|
2124
|
+
|
|
2125
|
+
\`\`\`typescript
|
|
2126
|
+
import { AddSkillDialog, useProfileSkills } from '@iblai/iblai-js/web-containers';
|
|
2127
|
+
|
|
2128
|
+
const skills = useProfileSkills();
|
|
2129
|
+
|
|
2130
|
+
<AddSkillDialog
|
|
2131
|
+
open={open}
|
|
2132
|
+
onOpenChange={setOpen}
|
|
2133
|
+
type="self-reported"
|
|
2134
|
+
fetchedSkills={skills.fetchedSkills}
|
|
2135
|
+
isFetchingSkills={skills.isFetchingSkills}
|
|
2136
|
+
isFetchingSkillsError={skills.isFetchingSkillsError}
|
|
2137
|
+
updatingSkill={skills.updatingSkill}
|
|
2138
|
+
onSearch={(q) => skills.handleFetchAllSkills(q)}
|
|
2139
|
+
onAddSkill={(skill) => skills.handleSkillsUpdate(/* ... */)}
|
|
2140
|
+
/>
|
|
2141
|
+
\`\`\`
|
|
2142
|
+
|
|
2143
|
+
Search input is debounced (default 500ms, configurable via \`searchDebounceMs\`).
|
|
2144
|
+
|
|
2145
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/add-skill-dialog.tsx\``,
|
|
2146
|
+
SkeletonAddSkillsLoading: `# SkeletonAddSkillsLoading Component
|
|
2147
|
+
|
|
2148
|
+
Loading placeholder row for the AddSkillDialog search results. Pure presentational.
|
|
2149
|
+
|
|
2150
|
+
\`\`\`typescript
|
|
2151
|
+
import { SkeletonAddSkillsLoading } from '@iblai/iblai-js/web-containers';
|
|
2152
|
+
|
|
2153
|
+
<SkeletonAddSkillsLoading />
|
|
2154
|
+
\`\`\`
|
|
2155
|
+
|
|
2156
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skeleton-add-skills-loading.tsx\``,
|
|
2157
|
+
PathwayDetailModal: `# PathwayDetailModal Component
|
|
2158
|
+
|
|
2159
|
+
Detail modal for a single pathway showing its courses, completion bar, and Enroll button. Presentational. Uses next/image, so it ships from \`@iblai/iblai-js/web-containers/next\`.
|
|
2160
|
+
|
|
2161
|
+
\`\`\`typescript
|
|
2162
|
+
import { PathwayDetailModal, useProfilePathways } from '@iblai/iblai-js/web-containers/next';
|
|
2163
|
+
|
|
2164
|
+
<PathwayDetailModal
|
|
2165
|
+
pathway={selectedPathway}
|
|
2166
|
+
paths={pathwayCourses}
|
|
2167
|
+
pathwayCompletion={completion}
|
|
2168
|
+
enrollmentStatus={isEnrolled}
|
|
2169
|
+
bannerImageSrc={lmsUrl + pathway.metadata?.banner_image_asset_path}
|
|
2170
|
+
onClose={() => setSelectedPathway(null)}
|
|
2171
|
+
onEnroll={(p) => enrollMutation(p)}
|
|
2172
|
+
onCourseClick={(course) => router.push(\`/courses/\${course.course_id}\`)}
|
|
2173
|
+
/>
|
|
2174
|
+
\`\`\`
|
|
2175
|
+
|
|
2176
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/pathway-detail-modal.tsx\``,
|
|
2177
|
+
CreatePathwayModal: `# CreatePathwayModal Component
|
|
2178
|
+
|
|
2179
|
+
"Create New Pathway" wizard modal. Owns its local form state (name, description, subject, cover image, selected courses/resources, search query). Caller handles search via \`onSearchChange\` and persistence via \`onSave\`. Uses next/image, so it ships from \`@iblai/iblai-js/web-containers/next\`.
|
|
2180
|
+
|
|
2181
|
+
\`\`\`typescript
|
|
2182
|
+
import { CreatePathwayModal, type CreatePathwayFormData } from '@iblai/iblai-js/web-containers/next';
|
|
2183
|
+
|
|
2184
|
+
<CreatePathwayModal
|
|
2185
|
+
open={open}
|
|
2186
|
+
onOpenChange={setOpen}
|
|
2187
|
+
searchedCourses={searchResults.courses}
|
|
2188
|
+
searchedResources={searchResults.resources}
|
|
2189
|
+
isCoursesLoading={isLoading}
|
|
2190
|
+
onSearchChange={(q) => debouncedSearch(q)}
|
|
2191
|
+
onSave={(form: CreatePathwayFormData) => createPathwayMutation(buildPayload(form))}
|
|
2192
|
+
/>
|
|
2193
|
+
\`\`\`
|
|
2194
|
+
|
|
2195
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/create-pathway-modal.tsx\``,
|
|
2196
|
+
SkeletonCreatePathwaySearchList: `# SkeletonCreatePathwaySearchList Component
|
|
2197
|
+
|
|
2198
|
+
Loading placeholder row for the CreatePathwayModal content search list. Pure presentational.
|
|
2199
|
+
|
|
2200
|
+
\`\`\`typescript
|
|
2201
|
+
import { SkeletonCreatePathwaySearchList } from '@iblai/iblai-js/web-containers';
|
|
2202
|
+
|
|
2203
|
+
<SkeletonCreatePathwaySearchList />
|
|
2204
|
+
\`\`\`
|
|
2205
|
+
|
|
2206
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skeleton-create-pathway-search-list.tsx\``,
|
|
2207
|
+
ProgramDetailModal: `# ProgramDetailModal Component
|
|
2208
|
+
|
|
2209
|
+
Detail modal for a single program with optional admin Settings tab. Caller supplies the courses, completion, enrollment state, banner image, initial settings, and the showSettings (admin) flag. Uses next/image, so it ships from \`@iblai/iblai-js/web-containers/next\`.
|
|
2210
|
+
|
|
2211
|
+
\`\`\`typescript
|
|
2212
|
+
import {
|
|
2213
|
+
ProgramDetailModal,
|
|
2214
|
+
EMPTY_PROGRAM_SETTINGS_FORM,
|
|
2215
|
+
type ProgramSettingsFormData,
|
|
2216
|
+
} from '@iblai/iblai-js/web-containers/next';
|
|
2217
|
+
|
|
2218
|
+
<ProgramDetailModal
|
|
2219
|
+
program={selectedProgram}
|
|
2220
|
+
courses={programCourses}
|
|
2221
|
+
programCompletion={completion}
|
|
2222
|
+
enrollmentStatus={isEnrolled}
|
|
2223
|
+
showSettings={isAdmin}
|
|
2224
|
+
initialSettings={metadata?.formData}
|
|
2225
|
+
onClose={() => setSelected(null)}
|
|
2226
|
+
onEnroll={(p) => enrollMutation(p)}
|
|
2227
|
+
onCourseClick={(id) => router.push(\`/courses/\${id}\`)}
|
|
2228
|
+
onSaveSettings={(s: ProgramSettingsFormData) => updateMetadataMutation(s)}
|
|
2229
|
+
/>
|
|
2230
|
+
\`\`\`
|
|
2231
|
+
|
|
2232
|
+
The Settings form is owned internally; \`initialSettings\` re-initializes when the prop changes.
|
|
2233
|
+
|
|
2234
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/program-detail-modal.tsx\``,
|
|
2235
|
+
CredentialBox: `# CredentialBox Component
|
|
2236
|
+
|
|
2237
|
+
Public-profile credentials grid using CredentialMiniBox tiles. Presentational — pass the credentials list from \`useProfileCredentials\`.
|
|
2238
|
+
|
|
2239
|
+
\`\`\`typescript
|
|
2240
|
+
import { CredentialBox, useProfileCredentials } from '@iblai/iblai-js/web-containers';
|
|
2241
|
+
|
|
2242
|
+
const { fetchedCredentials, isLoading, isError } = useProfileCredentials({ search: '' });
|
|
2243
|
+
<CredentialBox credentials={fetchedCredentials} isLoading={isLoading} isError={isError} />
|
|
2244
|
+
\`\`\`
|
|
2245
|
+
|
|
2246
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/credential-box.tsx\``,
|
|
2247
|
+
EducationBox: `# EducationBox Component
|
|
2248
|
+
|
|
2249
|
+
Public-profile education list with edit buttons. Presentational. Caller wires the EducationDialog open state via \`onEditEducation\`.
|
|
2250
|
+
|
|
2251
|
+
\`\`\`typescript
|
|
2252
|
+
import { EducationBox } from '@iblai/iblai-js/web-containers';
|
|
2253
|
+
import { useGetUserEducationQuery } from '@iblai/data-layer';
|
|
2254
|
+
|
|
2255
|
+
const { data, isLoading, error } = useGetUserEducationQuery([{ org, username }]);
|
|
2256
|
+
<EducationBox
|
|
2257
|
+
education={data}
|
|
2258
|
+
isLoading={isLoading}
|
|
2259
|
+
isError={!!error}
|
|
2260
|
+
onEditEducation={(e) => setEditing(e)}
|
|
2261
|
+
/>
|
|
2262
|
+
\`\`\`
|
|
2263
|
+
|
|
2264
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/education-box.tsx\``,
|
|
2265
|
+
ExperienceBox: `# ExperienceBox Component
|
|
2266
|
+
|
|
2267
|
+
Public-profile work experience list with edit buttons. Presentational. Mirrors EducationBox.
|
|
2268
|
+
|
|
2269
|
+
\`\`\`typescript
|
|
2270
|
+
import { ExperienceBox } from '@iblai/iblai-js/web-containers';
|
|
2271
|
+
|
|
2272
|
+
<ExperienceBox
|
|
2273
|
+
experience={data}
|
|
2274
|
+
isLoading={isLoading}
|
|
2275
|
+
isError={isError}
|
|
2276
|
+
onEditExperience={(x) => setEditing(x)}
|
|
2277
|
+
/>
|
|
2278
|
+
\`\`\`
|
|
2279
|
+
|
|
2280
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/experience-box.tsx\``,
|
|
2281
|
+
SkillsBox: `# SkillsBox Component
|
|
2282
|
+
|
|
2283
|
+
Public-profile skills grid split into Earned, Self-Reported, and Desired sections. Presentational — pass the three RTK query payloads from \`useProfileSkills\`.
|
|
2284
|
+
|
|
2285
|
+
\`\`\`typescript
|
|
2286
|
+
import { SkillsBox, useProfileSkills } from '@iblai/iblai-js/web-containers';
|
|
2287
|
+
|
|
2288
|
+
const skills = useProfileSkills();
|
|
2289
|
+
<SkillsBox
|
|
2290
|
+
earnedSkills={skills.earnedSkills}
|
|
2291
|
+
earnedSkillsLoading={skills.earnedSkillsLoading}
|
|
2292
|
+
earnedSkillsError={skills.earnedSkillsError}
|
|
2293
|
+
selfReportedSkills={skills.selfReportedSkills}
|
|
2294
|
+
selfReportedSkillsLoading={skills.selfReportedSkillsLoading}
|
|
2295
|
+
selfReportedSkillsError={skills.selfReportedSkillsError}
|
|
2296
|
+
desiredSkills={skills.desiredSkills}
|
|
2297
|
+
desiredSkillsLoading={skills.desiredSkillsLoading}
|
|
2298
|
+
desiredSkillsError={skills.desiredSkillsError}
|
|
2299
|
+
/>
|
|
2300
|
+
\`\`\`
|
|
2301
|
+
|
|
2302
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skills-box.tsx\``,
|
|
2303
|
+
ResumeBox: `# ResumeBox Component
|
|
2304
|
+
|
|
2305
|
+
Public-profile PDF resume viewer (react-pdf) with paging, zoom, and rotation controls. Presentational — caller resolves the resume URL.
|
|
2306
|
+
|
|
2307
|
+
\`\`\`typescript
|
|
2308
|
+
import { ResumeBox } from '@iblai/iblai-js/web-containers';
|
|
2309
|
+
|
|
2310
|
+
const resumeUrl = data?.files?.find((f) => f.type === 'resume')?.url;
|
|
2311
|
+
<ResumeBox resumeUrl={resumeUrl} isLoading={isLoading} isError={isError} />
|
|
2312
|
+
\`\`\`
|
|
2313
|
+
|
|
2314
|
+
Must run client-side (\`'use client'\`).
|
|
2315
|
+
|
|
2316
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/resume-box.tsx\``,
|
|
2317
|
+
SkeletonEducationBox: `# SkeletonEducationBox Component
|
|
2318
|
+
|
|
2319
|
+
Loading placeholder for an EducationBox / ExperienceBox row. Pure presentational.
|
|
2320
|
+
|
|
2321
|
+
\`\`\`typescript
|
|
2322
|
+
import { SkeletonEducationBox } from '@iblai/iblai-js/web-containers';
|
|
2323
|
+
|
|
2324
|
+
<SkeletonEducationBox />
|
|
2325
|
+
\`\`\`
|
|
2326
|
+
|
|
2327
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/skeleton-education-box.tsx\``,
|
|
2328
|
+
MediaBox: `# MediaBox Component
|
|
2329
|
+
|
|
2330
|
+
Public-profile media uploader and uploaded-media grid. Owns the @tanstack/react-form file/link tabs internally; caller handles persistence via \`onUploadFile\` / \`onUploadLink\`. Uses next/link, so it ships from \`@iblai/iblai-js/web-containers/next\`.
|
|
2331
|
+
|
|
2332
|
+
\`\`\`typescript
|
|
2333
|
+
import { MediaBox, type UploadedFile } from '@iblai/iblai-js/web-containers/next';
|
|
2334
|
+
|
|
2335
|
+
<MediaBox
|
|
2336
|
+
uploadedMedia={mediaList}
|
|
2337
|
+
isLoading={isLoading}
|
|
2338
|
+
isError={isError}
|
|
2339
|
+
isUploading={isUploading}
|
|
2340
|
+
resumeCheckboxEnabled={!isSkillsResumeFeatureHidden}
|
|
2341
|
+
onUploadFile={(file, isResume) => uploadResumeMutation({ file, isResume })}
|
|
2342
|
+
onUploadLink={(url) => uploadLinkMutation({ url })}
|
|
2343
|
+
onError={(msg) => toast.error(msg)}
|
|
2344
|
+
/>
|
|
2345
|
+
\`\`\`
|
|
2346
|
+
|
|
2347
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/media-box.tsx\``,
|
|
2348
|
+
CourseOutline: `# CourseOutline Component
|
|
2349
|
+
|
|
2350
|
+
Hierarchical course outline (chapter → lesson → sublesson) with collapsible tree + completion progress rings. Reads all state from \`CourseOutlineContext\` — the \`CourseContentLayout\` sets up the provider, or wrap manually.
|
|
2351
|
+
|
|
2352
|
+
\`\`\`typescript
|
|
2353
|
+
import { CourseOutline, CourseOutlineContext } from '@iblai/iblai-js/web-containers';
|
|
2354
|
+
|
|
2355
|
+
<CourseOutlineContext.Provider value={{ courseOutline, toggleModule, ... }}>
|
|
2356
|
+
<CourseOutline />
|
|
2357
|
+
</CourseOutlineContext.Provider>
|
|
2358
|
+
\`\`\`
|
|
2359
|
+
|
|
2360
|
+
**File Location**: \`packages/web-containers/src/components/course-content/course-outline.tsx\``,
|
|
2361
|
+
CourseOutlineDrawer: `# CourseOutlineDrawer Component
|
|
2362
|
+
|
|
2363
|
+
Mobile drawer wrapping \`<CourseOutline />\` in a shadcn Sheet. Reads open state from \`CourseOutlineContext\`.
|
|
2364
|
+
|
|
2365
|
+
\`\`\`typescript
|
|
2366
|
+
import { CourseOutlineDrawer } from '@iblai/iblai-js/web-containers';
|
|
2367
|
+
|
|
2368
|
+
<CourseOutlineDrawer />
|
|
2369
|
+
\`\`\`
|
|
2370
|
+
|
|
2371
|
+
**File Location**: \`packages/web-containers/src/components/course-content/course-outline-drawer.tsx\``,
|
|
2372
|
+
TimedExam: `# TimedExam Component
|
|
2373
|
+
|
|
2374
|
+
Timed-exam overlay + countdown for edX proctored subsections. Reads \`examInfo\` from \`EdxIframeContext\` and drives \`useStartExamMutation\` / \`useUpdateExamAttemptMutation\` / \`useLazyGetExamInfoQuery\` from \`@iblai/data-layer\`. Errors are logged via \`console.error\`; no internal toasts.
|
|
2375
|
+
|
|
2376
|
+
\`\`\`typescript
|
|
2377
|
+
import { TimedExam } from '@iblai/iblai-js/web-containers';
|
|
2378
|
+
|
|
2379
|
+
{examInfo && <TimedExam />}
|
|
2380
|
+
\`\`\`
|
|
2381
|
+
|
|
2382
|
+
**File Location**: \`packages/web-containers/src/components/course-content/timed-exam.tsx\``,
|
|
2383
|
+
CourseAccessGuard: `# CourseAccessGuard Component
|
|
2384
|
+
|
|
2385
|
+
Guards course content rendering on tenant / loading-state. Shows a spinner while loading, calls \`onUnauthorized\` if the course's \`platform_key\` doesn't match the current tenant (and isn't \`'main'\`), and calls \`onNotFound\` on failure with no course. Otherwise renders children. Routing is the caller's responsibility.
|
|
2386
|
+
|
|
2387
|
+
\`\`\`typescript
|
|
2388
|
+
import { CourseAccessGuard } from '@iblai/iblai-js/web-containers';
|
|
2389
|
+
|
|
2390
|
+
<CourseAccessGuard
|
|
2391
|
+
course={course}
|
|
2392
|
+
courseInfoLoadingState={courseInfoLoadingState}
|
|
2393
|
+
currentTenant={getTenant()}
|
|
2394
|
+
onUnauthorized={() => router.push('/error/403')}
|
|
2395
|
+
onNotFound={() => router.push('/error/404')}
|
|
2396
|
+
>
|
|
2397
|
+
{children}
|
|
2398
|
+
</CourseAccessGuard>
|
|
2399
|
+
\`\`\`
|
|
2400
|
+
|
|
2401
|
+
**File Location**: \`packages/web-containers/src/components/course-content/course-access-guard.tsx\``,
|
|
2402
|
+
CourseContentLoading: `# CourseContentLoading Component
|
|
2403
|
+
|
|
2404
|
+
Loading skeleton shown while \`CourseContentLayout\` is hydrating. Mirrors skillsai's \`app/course-content/[course_id]/loading.tsx\`.
|
|
2405
|
+
|
|
2406
|
+
\`\`\`typescript
|
|
2407
|
+
import { CourseContentLoading } from '@iblai/iblai-js/web-containers';
|
|
2408
|
+
|
|
2409
|
+
<CourseContentLoading />
|
|
2410
|
+
\`\`\`
|
|
2411
|
+
|
|
2412
|
+
**File Location**: \`packages/web-containers/src/components/course-content/course-content-loading.tsx\``,
|
|
2413
|
+
EdxIframe: `# EdxIframe Component
|
|
2414
|
+
|
|
2415
|
+
The edX iframe shell with postMessage JWT handshake, exam detection, prev/next lesson buttons, and debounced URL resolution. Reads state from \`EdxIframeContext\` + \`CourseOutlineContext\`; caller provides LMS/MFE/legacy LMS base URLs as props. Uses \`next/navigation\` (\`useSearchParams\`), so it ships from \`@iblai/iblai-js/web-containers/next\`.
|
|
2416
|
+
|
|
2417
|
+
\`\`\`typescript
|
|
2418
|
+
import { EdxIframe } from '@iblai/iblai-js/web-containers/next';
|
|
2419
|
+
|
|
2420
|
+
<EdxIframe
|
|
2421
|
+
lmsUrl="https://lms.example.com"
|
|
2422
|
+
mfeUrl="https://apps.example.com"
|
|
2423
|
+
legacyLmsUrl="https://legacy.example.com"
|
|
2424
|
+
edxTokenKey="edx_token"
|
|
2425
|
+
/>
|
|
2426
|
+
\`\`\`
|
|
2427
|
+
|
|
2428
|
+
**File Location**: \`packages/web-containers/src/components/course-content/edx-iframe.tsx\``,
|
|
2429
|
+
CourseContentTabPage: `# CourseContentTabPage Component
|
|
2430
|
+
|
|
2431
|
+
A single component replacing skillsai's seven per-tab \`page.tsx\` files under \`app/course-content/[course_id]/*\`. Sets \`activeTab\` on the \`EdxIframeContext\` once on mount and renders \`<EdxIframe />\`. Requires the same LMS/MFE/legacy URL props as \`EdxIframe\`.
|
|
2432
|
+
|
|
2433
|
+
\`\`\`typescript
|
|
2434
|
+
import { CourseContentTabPage } from '@iblai/iblai-js/web-containers/next';
|
|
2435
|
+
|
|
2436
|
+
// e.g. in app/course-content/[course_id]/progress/page.tsx
|
|
2437
|
+
<CourseContentTabPage
|
|
2438
|
+
tab="progress"
|
|
2439
|
+
lmsUrl={lmsUrl}
|
|
2440
|
+
mfeUrl={mfeUrl}
|
|
2441
|
+
legacyLmsUrl={legacyLmsUrl}
|
|
2442
|
+
/>
|
|
2443
|
+
\`\`\`
|
|
2444
|
+
|
|
2445
|
+
**File Location**: \`packages/web-containers/src/components/course-content/course-content-tab-page.tsx\``,
|
|
2446
|
+
CourseContentLayout: `# CourseContentLayout Component
|
|
2447
|
+
|
|
2448
|
+
Top-level layout for the course content experience. Owns the \`CourseOutlineContext\` + \`EdxIframeContext\` providers, wires \`useCourseDetail\` / \`useEdxIframe\`, renders the sidebar + tab strip + breadcrumb + progress indicator, and gates access via \`CourseAccessGuard\`. \`children\` is typically a \`<CourseContentTabPage />\`. Uses \`next/link\` and \`next/navigation\`, so it ships from \`@iblai/iblai-js/web-containers/next\`.
|
|
2449
|
+
|
|
2450
|
+
\`\`\`typescript
|
|
2451
|
+
import { CourseContentLayout } from '@iblai/iblai-js/web-containers/next';
|
|
2452
|
+
|
|
2453
|
+
<CourseContentLayout
|
|
2454
|
+
courseId={courseId}
|
|
2455
|
+
isPlatformAdmin={isPlatformAdmin}
|
|
2456
|
+
currentTenant={getTenant()}
|
|
2457
|
+
dmUrl={config.urls.dm()}
|
|
2458
|
+
courseEligibilityEnabled={config.settings.courseEligibilityEnabled()}
|
|
2459
|
+
onUnauthorized={() => router.push('/error/403')}
|
|
2460
|
+
onNotFound={() => router.push('/error/404')}
|
|
2461
|
+
onNavigate={(href, opts) => (opts?.external ? window.location.assign(href) : router.push(href))}
|
|
2462
|
+
onError={(msg) => toast.error(msg)}
|
|
2463
|
+
onSuccess={(msg) => toast.success(msg)}
|
|
2464
|
+
onCourseMentorChange={(uuid) => setCourseMentor(uuid)}
|
|
2465
|
+
>
|
|
2466
|
+
{children}
|
|
2467
|
+
</CourseContentLayout>
|
|
2468
|
+
\`\`\`
|
|
2469
|
+
|
|
2470
|
+
**File Location**: \`packages/web-containers/src/components/course-content/course-content-layout.tsx\``,
|
|
1738
2471
|
};
|
|
1739
2472
|
const UI_PRIMITIVES = [
|
|
1740
2473
|
'Button',
|
|
@@ -1783,7 +2516,18 @@ export function getComponentInfo(componentName) {
|
|
|
1783
2516
|
'AppSidebar',
|
|
1784
2517
|
'NavBar',
|
|
1785
2518
|
'ConversationStarters',
|
|
1786
|
-
,
|
|
2519
|
+
'ProfileTabs',
|
|
2520
|
+
'CourseBox',
|
|
2521
|
+
'CredentialMiniBox',
|
|
2522
|
+
'CredentialDetailModal',
|
|
2523
|
+
'ProfileInfoCards',
|
|
2524
|
+
'PathwayDetailModal',
|
|
2525
|
+
'CreatePathwayModal',
|
|
2526
|
+
'ProgramDetailModal',
|
|
2527
|
+
'MediaBox',
|
|
2528
|
+
'EdxIframe',
|
|
2529
|
+
'CourseContentTabPage',
|
|
2530
|
+
'CourseContentLayout',
|
|
1787
2531
|
];
|
|
1788
2532
|
return `Component "${componentName}" not found.
|
|
1789
2533
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-info.js","sourceRoot":"","sources":["../../src/tools/component-info.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"component-info.js","sourceRoot":"","sources":["../../src/tools/component-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-info.d.ts","sourceRoot":"","sources":["../../src/tools/hook-info.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAcxB,CAAC;
|
|
1
|
+
{"version":3,"file":"hook-info.d.ts","sourceRoot":"","sources":["../../src/tools/hook-info.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAcxB,CAAC;AAwvEF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuIpD"}
|
package/dist/tools/hook-info.js
CHANGED
|
@@ -1856,6 +1856,316 @@ const result = await chatWithWorkflow({
|
|
|
1856
1856
|
\`\`\`
|
|
1857
1857
|
|
|
1858
1858
|
**File Location**: \`packages/data-layer/src/features/workflows/api-slice.ts\``,
|
|
1859
|
+
useEnablePaywallMutation: `# useEnablePaywallMutation Hook (RTK Query)
|
|
1860
|
+
|
|
1861
|
+
Enables (or updates configuration for) a paywall on a paywallable item. Used for both the initial enable action and subsequent saves of paywall configuration (free tier, trial period, grandfathering strategy).
|
|
1862
|
+
|
|
1863
|
+
\`\`\`typescript
|
|
1864
|
+
import { useEnablePaywallMutation } from '@iblai/iblai-js/data-layer';
|
|
1865
|
+
|
|
1866
|
+
const [enablePaywall, { isLoading }] = useEnablePaywallMutation();
|
|
1867
|
+
|
|
1868
|
+
await enablePaywall({
|
|
1869
|
+
platform_key: string,
|
|
1870
|
+
item_type: string, // 'mentor' | 'course' | 'program' | 'pathway'
|
|
1871
|
+
item_id: string,
|
|
1872
|
+
is_enabled: boolean,
|
|
1873
|
+
allow_free_tier: boolean,
|
|
1874
|
+
trial_period_days: number,
|
|
1875
|
+
grandfathering_strategy: string, // 'free_forever' | 'require_subscription'
|
|
1876
|
+
}).unwrap();
|
|
1877
|
+
\`\`\`
|
|
1878
|
+
|
|
1879
|
+
**File Location**: \`packages/data-layer/src/features/monetization/custom-api-slice.ts\``,
|
|
1880
|
+
useDisablePaywallMutation: `# useDisablePaywallMutation Hook (RTK Query)
|
|
1881
|
+
|
|
1882
|
+
Disables a previously enabled paywall on an item. Existing subscribers continue per the configured grandfathering strategy.
|
|
1883
|
+
|
|
1884
|
+
\`\`\`typescript
|
|
1885
|
+
import { useDisablePaywallMutation } from '@iblai/iblai-js/data-layer';
|
|
1886
|
+
|
|
1887
|
+
const [disablePaywall, { isLoading }] = useDisablePaywallMutation();
|
|
1888
|
+
|
|
1889
|
+
await disablePaywall({
|
|
1890
|
+
platform_key: string,
|
|
1891
|
+
item_type: string, // 'mentor' | 'course' | 'program' | 'pathway'
|
|
1892
|
+
item_id: string,
|
|
1893
|
+
}).unwrap();
|
|
1894
|
+
\`\`\`
|
|
1895
|
+
|
|
1896
|
+
**File Location**: \`packages/data-layer/src/features/monetization/custom-api-slice.ts\``,
|
|
1897
|
+
useCancelSubscriptionMutation: `# useCancelSubscriptionMutation Hook (RTK Query)
|
|
1898
|
+
|
|
1899
|
+
Cancels a user's subscription to a paywalled item. For recurring subscriptions, the API typically returns a Stripe Customer Portal URL that the user must visit to confirm cancellation; for one-time purchases or grandfathered access, the response includes \`status: 'canceled'\` directly.
|
|
1900
|
+
|
|
1901
|
+
\`\`\`typescript
|
|
1902
|
+
import { useCancelSubscriptionMutation } from '@iblai/iblai-js/data-layer';
|
|
1903
|
+
|
|
1904
|
+
const [cancelSubscription, { isLoading }] = useCancelSubscriptionMutation();
|
|
1905
|
+
|
|
1906
|
+
const result = await cancelSubscription({
|
|
1907
|
+
platform_key: string,
|
|
1908
|
+
item_type: string, // 'mentor' | 'course' | 'program' | 'pathway'
|
|
1909
|
+
item_id: string,
|
|
1910
|
+
return_url?: string, // required for recurring subs (Stripe portal return)
|
|
1911
|
+
}).unwrap();
|
|
1912
|
+
|
|
1913
|
+
if (result.portal_url) {
|
|
1914
|
+
// Open Stripe Customer Portal
|
|
1915
|
+
window.open(result.portal_url, '_blank');
|
|
1916
|
+
} else if (result.status === 'canceled') {
|
|
1917
|
+
// Cancellation completed server-side
|
|
1918
|
+
}
|
|
1919
|
+
\`\`\`
|
|
1920
|
+
|
|
1921
|
+
**File Location**: \`packages/data-layer/src/features/monetization/custom-api-slice.ts\``,
|
|
1922
|
+
useCheckAccessQuery: `# useCheckAccessQuery Hook (RTK Query)
|
|
1923
|
+
|
|
1924
|
+
Checks whether the current authenticated user has access to a paywalled item. Returns access status and (when locked) pricing information that can be passed to \`PaywallModal\`. Scoped to the platform/tenant.
|
|
1925
|
+
|
|
1926
|
+
\`\`\`typescript
|
|
1927
|
+
import { useCheckAccessQuery } from '@iblai/iblai-js/data-layer';
|
|
1928
|
+
|
|
1929
|
+
const { data, isLoading } = useCheckAccessQuery({
|
|
1930
|
+
platform_key: string,
|
|
1931
|
+
item_type: string, // 'mentor' | 'course' | 'program' | 'pathway'
|
|
1932
|
+
item_id: string,
|
|
1933
|
+
});
|
|
1934
|
+
// data: { has_access: boolean, reason?: string, pricing?: { item_name, prices } }
|
|
1935
|
+
\`\`\`
|
|
1936
|
+
|
|
1937
|
+
**File Location**: \`packages/data-layer/src/features/monetization/custom-api-slice.ts\``,
|
|
1938
|
+
useCheckAccessUnscopedQuery: `# useCheckAccessUnscopedQuery Hook (RTK Query)
|
|
1939
|
+
|
|
1940
|
+
Same as \`useCheckAccessQuery\` but bypasses tenant scoping — used in anonymous / unauthenticated entry points (e.g. embed views, public landing pages) where the user's tenant context isn't yet established.
|
|
1941
|
+
|
|
1942
|
+
\`\`\`typescript
|
|
1943
|
+
import { useCheckAccessUnscopedQuery } from '@iblai/iblai-js/data-layer';
|
|
1944
|
+
|
|
1945
|
+
const { data, isLoading } = useCheckAccessUnscopedQuery({
|
|
1946
|
+
platform_key: string,
|
|
1947
|
+
item_type: string, // 'mentor' | 'course' | 'program' | 'pathway'
|
|
1948
|
+
item_id: string,
|
|
1949
|
+
});
|
|
1950
|
+
\`\`\`
|
|
1951
|
+
|
|
1952
|
+
Prefer \`useCheckAccessQuery\` whenever the user's tenant is known.
|
|
1953
|
+
|
|
1954
|
+
**File Location**: \`packages/data-layer/src/features/monetization/custom-api-slice.ts\``,
|
|
1955
|
+
useCourseMetadata: `# useCourseMetadata Hook
|
|
1956
|
+
|
|
1957
|
+
Wrapper around the LMS course-metadata RTK endpoints. Returns promise-returning helpers for use inside effects/callbacks.
|
|
1958
|
+
|
|
1959
|
+
\`\`\`typescript
|
|
1960
|
+
import { useCourseMetadata } from '@iblai/iblai-js/web-containers';
|
|
1961
|
+
|
|
1962
|
+
const {
|
|
1963
|
+
handleFetchCourseMetaData,
|
|
1964
|
+
handleFetchCourseEligibility,
|
|
1965
|
+
handleFetchCourseCompletionOutlines,
|
|
1966
|
+
isLoading,
|
|
1967
|
+
isError,
|
|
1968
|
+
} = useCourseMetadata();
|
|
1969
|
+
|
|
1970
|
+
const meta = await handleFetchCourseMetaData('course-v1:org+num+run');
|
|
1971
|
+
\`\`\`
|
|
1972
|
+
|
|
1973
|
+
Backed by \`useLazyGetCourseMetaDataQuery\`, \`useLazyGetCourseEligibilityQuery\`, and \`useLazyGetCourseCompletionOutlinesQuery\` from \`@iblai/data-layer\` (LMS service).
|
|
1974
|
+
|
|
1975
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-course-metadata.ts\``,
|
|
1976
|
+
useUserCourses: `# useUserCourses Hook
|
|
1977
|
+
|
|
1978
|
+
Fetches the logged-in user's enrolled or assigned courses (paged), then hydrates each row with edX course metadata. Supports both API search and client-side filtering.
|
|
1979
|
+
|
|
1980
|
+
\`\`\`typescript
|
|
1981
|
+
import { useUserCourses } from '@iblai/iblai-js/web-containers';
|
|
1982
|
+
|
|
1983
|
+
const result = useUserCourses({ limit: 8, page: 1, courseType: 'enrolled', useAPISearch: false });
|
|
1984
|
+
// result.userCourses, result.isLoadingUserCourses, result.errorUserCourses, result.pagination
|
|
1985
|
+
\`\`\`
|
|
1986
|
+
|
|
1987
|
+
Reads username/tenant/userId from localStorage via the helpers shipped alongside the hook. Backed by the new \`courses\` slice in \`@iblai/data-layer\`.
|
|
1988
|
+
|
|
1989
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-user-courses.ts\``,
|
|
1990
|
+
useProfileCredentials: `# useProfileCredentials Hook
|
|
1991
|
+
|
|
1992
|
+
Fetches the logged-in user's credential assertions and maintains a client-side filtered list keyed off a search string.
|
|
1993
|
+
|
|
1994
|
+
\`\`\`typescript
|
|
1995
|
+
import { useProfileCredentials } from '@iblai/iblai-js/web-containers';
|
|
1996
|
+
|
|
1997
|
+
const result = useProfileCredentials({ maxCredentials: 12 });
|
|
1998
|
+
// result.filteredCredentials, result.fetchedCredentials, result.isLoading, result.isError
|
|
1999
|
+
\`\`\`
|
|
2000
|
+
|
|
2001
|
+
Backed by \`useLazyGetUserCredentialsQuery\` from \`@iblai/data-layer\`.
|
|
2002
|
+
|
|
2003
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-profile-credentials.ts\``,
|
|
2004
|
+
useProfileSkills: `# useProfileSkills Hook
|
|
2005
|
+
|
|
2006
|
+
Aggregates the logged-in user's earned, self-reported, and desired skills, plus mutations to create / update / delete self-reported and desired skills. Also exposes a \`handleFetchAllSkills\` helper backed by the catalog search endpoint.
|
|
2007
|
+
|
|
2008
|
+
\`\`\`typescript
|
|
2009
|
+
import { useProfileSkills } from '@iblai/iblai-js/web-containers';
|
|
2010
|
+
|
|
2011
|
+
const skills = useProfileSkills(showToast);
|
|
2012
|
+
// skills.earnedSkills, .selfReportedSkills, .desiredSkills (+ loading/error/success)
|
|
2013
|
+
// skills.handleSkillsUpdate(skill, allSkills, callback)
|
|
2014
|
+
// skills.handleSkillsDeletion(skill, allSkills, callback)
|
|
2015
|
+
// skills.handleSkillsCreate(reportedSkill)
|
|
2016
|
+
// skills.handleFetchAllSkills(query) → updates skills.fetchedSkills
|
|
2017
|
+
\`\`\`
|
|
2018
|
+
|
|
2019
|
+
Backed by \`useGetUserEarnedSkillsQuery\`, \`useGetUserReportedSkillsQuery\`, \`useGetUserDesiredSkillsQuery\`, \`useCreateOrUpdateUserReportedSkillMutation\`, and \`useCreateOrUpdateUserDesiredSkillMutation\` from \`@iblai/data-layer\`. Uses sonner for toasts.
|
|
2020
|
+
|
|
2021
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-profile-skills.ts\``,
|
|
2022
|
+
useCatalogSearch: `# useCatalogSearch Hook
|
|
2023
|
+
|
|
2024
|
+
Thin wrapper around \`useLazyGetCatalogSearchQuery\` exposing a promise-returning \`handleSearch\` helper for ad-hoc searches inside effects/callbacks.
|
|
2025
|
+
|
|
2026
|
+
\`\`\`typescript
|
|
2027
|
+
import { useCatalogSearch } from '@iblai/iblai-js/web-containers';
|
|
2028
|
+
|
|
2029
|
+
const { handleSearch, isLoading, isError } = useCatalogSearch();
|
|
2030
|
+
const result = await handleSearch({ content: ['skills'], tenant: 'acme', query: 'rust' });
|
|
2031
|
+
\`\`\`
|
|
2032
|
+
|
|
2033
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-catalog-search.ts\``,
|
|
2034
|
+
useProfilePathways: `# useProfilePathways Hook
|
|
2035
|
+
|
|
2036
|
+
Fetches the logged-in user's catalog / assigned / enrolled pathways and hydrates each with completion stats. Supports client-side search filtering on pathway name.
|
|
2037
|
+
|
|
2038
|
+
\`\`\`typescript
|
|
2039
|
+
import { useProfilePathways } from '@iblai/iblai-js/web-containers';
|
|
2040
|
+
|
|
2041
|
+
const {
|
|
2042
|
+
pathways,
|
|
2043
|
+
filteredPathways,
|
|
2044
|
+
pathwayCompletions,
|
|
2045
|
+
pathwayCompletionsLoading,
|
|
2046
|
+
isLoading,
|
|
2047
|
+
isError,
|
|
2048
|
+
handleFetchSinglePathwayEnrollmentStatus,
|
|
2049
|
+
} = useProfilePathways({ searchQuery: q, contentType: 'catalog', lmsUrl: lmsBaseUrl });
|
|
2050
|
+
// contentType is one of 'catalog' | 'assigned' | 'enrolled'
|
|
2051
|
+
\`\`\`
|
|
2052
|
+
|
|
2053
|
+
Pass \`lmsUrl\` to prefix catalog \`metadata.course_image_asset_path\` URLs (replaces skillsai's \`config.urls.lms()\`).
|
|
2054
|
+
|
|
2055
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-profile-pathways.ts\``,
|
|
2056
|
+
useProfilePrograms: `# useProfilePrograms Hook
|
|
2057
|
+
|
|
2058
|
+
Fetches the logged-in user's enrolled / assigned / catalog programs and hydrates each with completion stats. Supports client-side search filtering on program name.
|
|
2059
|
+
|
|
2060
|
+
\`\`\`typescript
|
|
2061
|
+
import { useProfilePrograms } from '@iblai/iblai-js/web-containers';
|
|
2062
|
+
|
|
2063
|
+
const { programs, filteredPrograms, programCompletions, programCompletionsLoading, isLoading, isError } =
|
|
2064
|
+
useProfilePrograms({ searchQuery: q, activeTab: 'enrolled' });
|
|
2065
|
+
\`\`\`
|
|
2066
|
+
|
|
2067
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-profile-programs.ts\``,
|
|
2068
|
+
useProfileActivityStats: `# useProfileActivityStats Hook
|
|
2069
|
+
|
|
2070
|
+
Fans out 9 RTK lazy queries in parallel to populate the profile activity counters (Points, Skills, Credentials, Courses, Programs, Pathways, Resources, Assessments, Videos). Each row updates independently as its request resolves; per-stat failures collapse to 0 without blocking the others.
|
|
2071
|
+
|
|
2072
|
+
\`\`\`typescript
|
|
2073
|
+
import { useProfileActivityStats } from '@iblai/iblai-js/web-containers';
|
|
2074
|
+
|
|
2075
|
+
const { stats } = useProfileActivityStats();
|
|
2076
|
+
// stats: ActivityStats[] — { value, label, loading }
|
|
2077
|
+
\`\`\`
|
|
2078
|
+
|
|
2079
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-profile-activity-stats.ts\``,
|
|
2080
|
+
useProfileTimeSpent: `# useProfileTimeSpent Hook
|
|
2081
|
+
|
|
2082
|
+
Fetches the last 7 days of learning activity for the logged-in user and returns it as \`{ date, minutes }\` rows ready for a chart (e.g. \`ProfileTimeChart\`).
|
|
2083
|
+
|
|
2084
|
+
\`\`\`typescript
|
|
2085
|
+
import { useProfileTimeSpent } from '@iblai/iblai-js/web-containers';
|
|
2086
|
+
|
|
2087
|
+
const { timeSpent, timeSpentLoading } = useProfileTimeSpent();
|
|
2088
|
+
\`\`\`
|
|
2089
|
+
|
|
2090
|
+
Backed by \`useLazyGetOverTimeActivityQuery\` from \`@iblai/data-layer\`.
|
|
2091
|
+
|
|
2092
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-profile-timespent.ts\``,
|
|
2093
|
+
useUserMetadata: `# useUserMetadata Hook
|
|
2094
|
+
|
|
2095
|
+
Thin wrapper around \`useGetUserMetadataQuery\` that reads the username from localStorage and skips the request when there is no logged-in user.
|
|
2096
|
+
|
|
2097
|
+
\`\`\`typescript
|
|
2098
|
+
import { useUserMetadata } from '@iblai/iblai-js/web-containers';
|
|
2099
|
+
|
|
2100
|
+
const { userMetaData, userMetaDataLoading, userMetaDataError } = useUserMetadata();
|
|
2101
|
+
\`\`\`
|
|
2102
|
+
|
|
2103
|
+
**File Location**: \`packages/web-containers/src/components/skills-profile/hooks/use-user-metadata.ts\``,
|
|
2104
|
+
useCourseDetail: `# useCourseDetail Hook
|
|
2105
|
+
|
|
2106
|
+
Large business-logic hook for the course-content experience. Fetches course metadata / progress / completion / eligibility, owns the "enroll / access / buy now / request access" button-action state machine, and surfaces a Stripe checkout flow. Ported from skillsai with the profile-PR refactor: no \`next/router\`, no \`sonner\`, no \`config.*\` reads — all navigation / toasts / config go via props.
|
|
2107
|
+
|
|
2108
|
+
\`\`\`typescript
|
|
2109
|
+
import { useCourseDetail } from '@iblai/iblai-js/web-containers';
|
|
2110
|
+
|
|
2111
|
+
const {
|
|
2112
|
+
handleFetchCourseInfo,
|
|
2113
|
+
handleFetchCourseSyllabus,
|
|
2114
|
+
handleFetchCourseEligibilityInfo,
|
|
2115
|
+
handleFetchCourseProgress,
|
|
2116
|
+
handleFetchCourseCompletion,
|
|
2117
|
+
handleEnrollToCourse,
|
|
2118
|
+
handleCreateCheckoutSession,
|
|
2119
|
+
handleAccessCourse,
|
|
2120
|
+
handleOpenLesson,
|
|
2121
|
+
course,
|
|
2122
|
+
courseOutline,
|
|
2123
|
+
courseEligibility,
|
|
2124
|
+
courseProgress,
|
|
2125
|
+
courseCompletion,
|
|
2126
|
+
courseInfoLoadingState,
|
|
2127
|
+
} = useCourseDetail({
|
|
2128
|
+
courseId,
|
|
2129
|
+
dmUrl: config.urls.dm(),
|
|
2130
|
+
courseEligibilityEnabled: config.settings.courseEligibilityEnabled(),
|
|
2131
|
+
onNavigate: (href, opts) => (opts?.external ? window.location.assign(href) : router.push(href)),
|
|
2132
|
+
onError: (msg) => toast.error(msg),
|
|
2133
|
+
onSuccess: (msg) => toast.success(msg),
|
|
2134
|
+
});
|
|
2135
|
+
\`\`\`
|
|
2136
|
+
|
|
2137
|
+
**File Location**: \`packages/web-containers/src/components/course-content/hooks/use-course-detail.ts\``,
|
|
2138
|
+
useEdxIframe: `# useEdxIframe Hook
|
|
2139
|
+
|
|
2140
|
+
Helpers for the edX iframe course navigation: pure tree-traversal utils (\`findSequentialParent\`, \`flattenVerticalBlocks\`, \`getFirstAvailableUnit\`, \`findLastResumeBlock\`, \`getParentBlockById\`, \`getPreviousUnitIframe\`, \`getNextUnitIframe\`, \`getParentsInfosFromSublessonId\`, \`addBookmarksTab\`, \`getUnitToIframe\`) plus an async \`getIframeURL\` that wraps the SSO-token handshake via \`useLazyGetEdxSSOTokenQuery\` from \`@iblai/data-layer\`. Takes the LMS / MFE / legacy LMS base URLs as arguments instead of reading from a config module.
|
|
2141
|
+
|
|
2142
|
+
\`\`\`typescript
|
|
2143
|
+
import { useEdxIframe } from '@iblai/iblai-js/web-containers';
|
|
2144
|
+
|
|
2145
|
+
const { getIframeURL, getUnitToIframe, findSequentialParent } = useEdxIframe({
|
|
2146
|
+
lmsUrl: config.urls.lms(),
|
|
2147
|
+
mfeUrl: config.urls.mfe(),
|
|
2148
|
+
legacyLmsUrl: config.urls.legacyLmsUrl(),
|
|
2149
|
+
});
|
|
2150
|
+
\`\`\`
|
|
2151
|
+
|
|
2152
|
+
**File Location**: \`packages/web-containers/src/components/course-content/hooks/use-edx-iframe.ts\``,
|
|
2153
|
+
useChatState: `# useChatState Hook
|
|
2154
|
+
|
|
2155
|
+
Small context accessor exposing the shared mentor-chat state (open/close, current course mentor uuid, sidebar visibility). Ported from the \`useChatState\` + \`ChatContext\` + \`ChatProvider\` bundle in skillsai's \`components/chat-button.tsx\`. The actual \`ChatButton\` UI was NOT ported (it's config-heavy + depends on a mentor web component).
|
|
2156
|
+
|
|
2157
|
+
\`\`\`typescript
|
|
2158
|
+
import { ChatProvider, useChatState } from '@iblai/iblai-js/web-containers';
|
|
2159
|
+
|
|
2160
|
+
<ChatProvider>
|
|
2161
|
+
{children}
|
|
2162
|
+
</ChatProvider>
|
|
2163
|
+
|
|
2164
|
+
// inside a child:
|
|
2165
|
+
const { isOpen, setIsOpen, courseMentor, setCourseMentor } = useChatState();
|
|
2166
|
+
\`\`\`
|
|
2167
|
+
|
|
2168
|
+
**File Location**: \`packages/web-containers/src/components/course-content/hooks/use-chat-state.ts\``,
|
|
1859
2169
|
};
|
|
1860
2170
|
export function getHookInfo(hookName) {
|
|
1861
2171
|
const info = hooks[hookName];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-info.js","sourceRoot":"","sources":["../../src/tools/hook-info.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hook-info.js","sourceRoot":"","sources":["../../src/tools/hook-info.ts"],"names":[],"mappings":"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"}
|